Skip to main content

LPIC 102 - Apuntes certificación

2025-01-01
warning

Estas notas estan en modo borrodador, puede tener datos incorrectos

Gestion usuarios​

Contraseñas, usuarios y grupos​
/etc/passwd
nombre_usuario:contraseña:UID:GID:información:directorio_home:shell
/etc/shadow
nombre_usuario:contraseña_encriptada:última_modificación:minimo:maximo:aviso:inactivo:expiración:reservado
/etc/group
nombre_grupo:contraseña:GID:lista_de_usuarios
Useradd​
ParámetroNota
-cCustom comments
-dCustom home
-eDate disable user
-fPassword expire time until disable
-gGID
-GSecondary groups
-kSkeleton path
-mCreates home if it does no exists
-MNot create home
-sShell
-uUID
Passwd​
$ passwd -S # O passwd -status
carol P 12/07/2019 0 99999 7 -1
CampoNota
​P​/L​/NP​Password, Locked, NoPass
12/07/2019Último cambio pass
0Minima edad cambio pass
99999Máxima edad
7Warning period
-1Periodo inactividad antes bloqueo
OpcionesNota
​-S​Status
​-l​Lock
​-u​Unlock
Chage​
$ chage -l israel
Last password change : Apr 17, 2025
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
OpcionesNota
​-m 5 user​Minimo días entre cambios pass
​-M 30 user​Pass expiration
​-d 10 user​Cambiar el numero de dias pass changed. 0 fuerza cambio pass next login
​-W 10 user​Warning period
​-I 10 user​Dias inactividad antes de ser lock
Log users​
$ last
israel tty7 :0 Sun Jun 29 08:13 gone - no logout
reboot system boot 6.8.0-62-generic Sun Jun 29 08:12 still running
israel tty7 :0 Sat Jun 28 18:30 - 23:07 (04:36)
reboot system boot 6.8.0-62-generic Sat Jun 28 18:30 - 23:07 (04:36)
israel tty7 :0 Sat Jun 28 12:39 - 14:40 (02:01)

$ who
israel tty7 2025-06-29 08:13 (:0)

$ w
07:40:18 up 1:27, 1 user, load average: 2,20, 1,94, 1,89
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
israel - 08:13 1:26m 0.00s 0.05s lightdm --session-child 13 20
ComandoNota
​last​Listar los últimos accessos
​who​Usuarios activos conectados
​w​Lo mismo que who​ pero con más info

Getent​

  • ​passwd​: Para consultar la base de datos de usuarios.
  • ​group​: Para consultar la base de datos de grupos.
  • ​hosts​: Para consultar la base de datos de nombres de host.
  • ​services​: Para consultar la base de datos de servicios de red.
  • ​protocols​: Para consultar la base de datos de protocolos de red.

Especificar BBDD: getent -s files hosts aaa.com​

Nsswitch​

El archivo de configuración es /etc/nsswitch.conf​

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: files systemd
group: files systemd
shadow: files systemd
gshadow: files systemd

hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files
ConfiguraciónNota
[!UNAVAIL=return]Si el servicio está down, dejar de buscar en el resto
[result=action]Realizar resultado si se obtiene result
[NOTFOUND=return]Si la busqueda funciona, pero no encuentra resultado. Stop

/etc/resolv.conf​

ComponenteNota
​nameserver​DNS server IP
​search​Añade dominio a los hosts em ñas busquedas
​domain​Define dominio local
​option​Añadir opciones como timeout:3​

Cron​

* * * * * comando_a_ejecutar

Los cinco primeros campos representan el tiempo y tienen el siguiente significado:

  1. Minuto: (0-59) El minuto en que se ejecutará el comando.
  2. Hora: (0-23) La hora en que se ejecutará el comando (en formato de 24 horas).
  3. Día del mes: (1-31) El día del mes en que se ejecutará el comando.
  4. Mes: (1-12) El mes en que se ejecutará el comando.
  5. Día de la semana: (0-7) El día de la semana en que se ejecutará el comando, donde 0 y 7 representan el domingo.
Ejemplos de programación​
  1. Ejecutar un comando cada minuto:

    * * * * * comando_a_ejecutar
  2. Ejecutar un comando a las 3:30 AM todos los días:

    30 3 * * * comando_a_ejecutar
  3. Ejecutar un comando todos los lunes a las 5 PM:

    0 17 * * 1 comando_a_ejecutar
  4. Ejecutar un comando el 1 de cada mes a la medianoche:

    0 0 1 * * comando_a_ejecutar
  5. Ejecutar un comando cada 15 minutos:

    */15 * * * * comando_a_ejecutar
  6. Ejecutar un comando a las 10 AM el primer día de cada mes:

    0 10 1 * * comando_a_ejecutar
Caracteres especiales​
  • **Asterisco (**​ ​*​ ​ ) : Representa "cada" unidad de tiempo. Por ejemplo, *​ en el campo de minutos significa "cada minuto".
  • **Barra (**​ ​/​ ​ ) : Se utiliza para especificar incrementos. Por ejemplo, */5​ en el campo de minutos significa "cada 5 minutos".
  • **Coma (**​ ​,​ ​ ) : Se utiliza para separar múltiples valores. Por ejemplo, 1,2,3​ en el campo de días del mes significa "el 1, 2 y 3 de cada mes".
  • **Guion (**​ ​-​ ​ ) : Se utiliza para especificar un rango. Por ejemplo, 1-5​ en el campo de días de la semana significa "de lunes a viernes".
Edición del crontab​​
crontab -e
Visualización de tareas programadas​
crontab -l
Allow y deny​

Los archivos cron.allow​ y cron.deny​son utilizados en sistemas Unix y Linux para controlar el acceso a la funcionalidad de cron, que permite a los usuarios programar tareas automáticas. Estos archivos determinan qué usuarios pueden o no pueden usar el sistema de cron.
La ruta es /etc/cron.allow​ y /etc/cron.deny​

cron.conf​
# Configuración global para cron

# Permitir que solo ciertos usuarios ejecuten cron
ALLOW_USERS=usuario1,usuario2

# Deshabilitar el registro de cron
NOLOGGING=true

# Establecer el directorio de trabajo predeterminado
DEFAULT_DIR=/var/spool/cron

Systemd​

1. **Service Units (**​ ​.service​​ )​
  • Representan servicios que se ejecutan en segundo plano.
  • Se utilizan para iniciar, detener y gestionar procesos.
  • Ejemplo: httpd.service​ para el servidor web Apache.
2. **Socket Units (**​ ​.socket​​ )​
  • Representan sockets de red o de sistema que pueden ser utilizados por servicios.
  • Permiten la activación bajo demanda de servicios cuando hay actividad en el socket.
  • Ejemplo: ssh.socket​ para el servicio SSH.
3. **Target Units (**​ ​.target​​ )​
  • Agrupan otras unidades y se utilizan para organizar el inicio de servicios.
  • Permiten gestionar el arranque de múltiples servicios como un solo grupo.
  • Ejemplo: multi-user.target​ agrupa servicios necesarios para un entorno de múltiples usuarios.
4. **Mount Units (**​ ​.mount​​ )​
  • Representan puntos de montaje de sistemas de archivos.
  • Se utilizan para montar y desmontar sistemas de archivos en el arranque o bajo demanda.
  • Ejemplo: home.mount​ para montar el directorio /home​.
5. **Automount Units (**​ ​.automount​​ )​
  • Se utilizan para montar sistemas de archivos automáticamente cuando se accede a ellos.
  • Permiten la activación bajo demanda de puntos de montaje.
  • Ejemplo: media-usb.automount​ para montar dispositivos USB automáticamente.
6. **Timer Units (**​ ​.timer​​ )​
  • Representan temporizadores que pueden activar otras unidades (generalmente servicios) en intervalos específicos.
  • Se utilizan como una alternativa a cron​ para programar tareas.
  • Ejemplo: backup.timer​ para realizar copias de seguridad periódicas.
7. **Path Units (**​ ​.path​​ )​
  • Monitorean cambios en el sistema de archivos y pueden activar otras unidades en respuesta a esos cambios.
  • Se utilizan para ejecutar servicios cuando se crean, eliminan o modifican archivos o directorios.
  • Ejemplo: watch-directory.path​ para activar un servicio cuando se modifica un directorio específico.
8. **Slice Units (**​ ​.slice​​ )​
  • Se utilizan para agrupar y gestionar recursos del sistema, como CPU y memoria, para un conjunto de servicios o procesos.
  • Permiten la gestión de recursos de manera jerárquica.
  • Ejemplo: user.slice​ para agrupar todos los procesos de un usuario.
9. **Scope Units (**​ ​.scope​​ )​
  • Representan procesos que son gestionados por systemd​, pero que no son iniciados por él.
  • Se utilizan para agrupar procesos que son iniciados fuera de systemd​, como aquellos iniciados por el usuario.
  • Ejemplo: un grupo de procesos iniciados por un entorno gráfico.
Manejo units​
systemctl list-units --state active --type service
sudo systemctl disable UNIT --now

At​

El comando at​ en Linux se utiliza para programar la ejecución de comandos o scripts en un momento específico en el futuro.

  1. Programar un comando para que se ejecute a una hora específica:

    at 15:00

    Después de ejecutar este comando, puedes escribir el comando que deseas ejecutar a las 15:00 y luego presionar Ctrl+D​ para finalizar.

  2. Programar un comando para que se ejecute en 10 minutos:

    echo "comando_a_ejecutar" | at now + 10 minutes
  3. Programar un script para que se ejecute mañana a las 8 AM:

    echo "/ruta/al/script.sh" | at 08:00 tomorrow
  4. Ver las tareas programadas con ​at​​:

    atq

    Este comando muestra una lista de las tareas programadas para el usuario actual.

  5. Eliminar una tarea programada:

    atrm [número_de_tarea]

    Donde [número_de_tarea]​ es el número que aparece en la lista de atq​.

  • Permisos: El uso de at​ puede estar restringido por los archivos /etc/at.allow​ y /etc/at.deny​. Si at.allow​ existe, solo los usuarios listados en él pueden usar at​. Si at.deny​ existe, los usuarios listados en él no pueden usar at​.
  • Salida: La salida de los comandos ejecutados por at​ se envía al correo del usuario que programó la tarea

Hora y fecha​

​timedatectl​

$ timedatectl
Local time: Sat 2025-06-28 18:12:10 CEST
Universal time: Sat 2025-06-28 16:12:10 UTC
RTC time: Sat 2025-06-28 16:12:10
Time zone: Europe/Madrid (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

​tzselect​

$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe

​/etc/localtime​ En un symlink. Se puede usar para cambiar la zona de forma manual

$ ls -la /etc/localtime 
lrwxrwxrwx 1 root root 33 Apr 17 19:53 /etc/localtime -> /usr/share/zoneinfo/Europe/Madrid

Idioma​

El idioma y la codificación de caracteres se llaman locales. $LANG​ contiene esta información. Ejemplo de portugues de brasil: pt_BR.UTF-8​

$ cat /etc/locale.conf 
LANG="en_US.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"

​/etc/locale.conf​ Contiene la definición de las variables. Se pueden añadir más variables a la configuración:

LC_TIME	# Establece formato de dia y hora
LC_ALL #Sobre-escribre todas las variables

Networking​

La defición de interfaces se encuentra en /sys/class/net​

drwxr-xr-x  2 root root 0 Jun 28 22:41 .
drwxr-xr-x 84 root root 0 Jun 28 18:30 ..
lrwxrwxrwx 1 root root 0 Jun 28 18:30 eno1 -> ../../devices/pci0000:00/0000:00:1f.6/net/eno1
lrwxrwxrwx 1 root root 0 Jun 28 18:30 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Jun 28 18:30 lxcbr0 -> ../../devices/virtual/net/lxcbr0
lrwxrwxrwx 1 root root 0 Jun 28 18:30 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx 1 root root 0 Jun 28 18:30 wlp4s0 -> ../../devices/pci0000:00/0000:00:1b.0/0000:04:00.0/net/wlp4s0
Ifupdown​

Depreciado: /etc/network/interfaces​ es su archivo de configuración. Se maneja con los comandos ifup​ y ifdown​. El servicio como tal se llama ifupdown​

NetworkManager​
- nmcli general     =>  General status and operations
- nmcli device => Show devices managed
- nmcli device desconnect `<device>` => Disconnects an interface
- nmcli device connect `<device>` => Connect interface
- nmcli networking => Network control
- nmcli radio => Radio switches. Ej WI-Fi
- nmcli connection => Manages connections
- nmcli connection down `<connection>` => Turn off a connection
- nmcli agent => Polkit control
- nmcli monitor => Monitor changes
Systemd-networkd​
  • ​systemd-networkd.service​ Network Configuration
  • ​systemd-resolved.service​ Network Name Resolution

DIrectorios de configuración de más prioridad a menos

  1. ​/etc/systemd/network​
  2. ​/run/systemd/network​
  3. ​/lib/systemd/network​

La autenticación en redes wifi se hace con un programa externo: wpa_supplicant​. Generar una clave wpa: # wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf​

$ wpa_passphrase Mywifi
# reading passphrase from stdin
1234567890
network={
ssid="Mywifi"
#psk="1234567890"
psk=678ce0d3122aca9c677e408b35c783346da61ae038065a7182390cb2b451bc75
}

Automáticamente crea el servicio mediante wpa_supplicant​ para crear el servicio wpa_supplicant@wlo1.service​. Despues de esto se debe crear un archivo .network con la configuración

Ip​
ip addr add 192.168.5.5/24 dev enp0s8
ip link set dev enp0s8 down
ip link show dev enp0s8
ip link set enp0s8 mtu 2000

Para ver estadísticas de red

$ ip stats show dev wlp4s0
3: wlp4s0: group offload subgroup hw_stats_info
l3_stats off used off
3: wlp4s0: group afstats subgroup mpls
3: wlp4s0: group offload subgroup l3_stats off used off
3: wlp4s0: group offload subgroup cpu_hit

3: wlp4s0: group link
RX: bytes packets errors dropped missed mcast
4712024637 3634572 0 438 0 0
TX: bytes packets errors dropped carrier collsns
88842332 410661 0 0 0 0
3: wlp4s0: group xstats_slave subgroup bond suite 802.3ad
3: wlp4s0: group xstats_slave subgroup bridge suite mcast
3: wlp4s0: group xstats_slave subgroup bridge suite stp
3: wlp4s0: group xstats subgroup bond suite 802.3ad
3: wlp4s0: group xstats subgroup bridge suite mcast
3: wlp4s0: group xstats subgroup bridge suite stp
Netstat​

Actualmente está depreciado y su remplazo es ss​

SS​
  • ​ss -t​ (or ss -tlnp​ for listening TCP ports)
  • ​ss -u​ (or ss -ulnp​ for listening UDP ports)
  • ​ss -r​ (or ss -rlnp​ for routing table sockets)
$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:53317 0.0.0.0:* users:(("localsend_app",pid=2561,fd=133))
LISTEN 0 4096 127.0.0.1:37729 0.0.0.0:* users:(("kopia",pid=2910,fd=12))
LISTEN 0 4096 127.0.0.1:6806 0.0.0.0:* users:(("SiYuan-Kernel",pid=12962,fd=43))
LISTEN 0 4096 127.0.0.1:34809 0.0.0.0:* users:(("bridge",pid=3077,fd=13))
LISTEN 0 4096 127.0.0.1:1143 0.0.0.0:* users:(("bridge",pid=3077,fd=15))
LISTEN 0 4096 127.0.0.1:1025 0.0.0.0:* users:(("bridge",pid=3077,fd=18))
LISTEN 0 4096 127.0.0.1:33389 0.0.0.0:* users:(("kopia",pid=2912,fd=12))
ColumnaDescripción
Recv-QPaquetes recividos por el socket pero que no se han pasado al programa
Send-QPaquetes que han sido enviados pero no se ha recivido el acknowlegment
Lsof​
OpcionesNota
​-i​Puertos en listening.
lsof -i@192.168.1.7​ para filtrar conexión
lsof -i :22​ Para filtrar puerto
-

SGUID/SUID​

  • ​rws​ Sin permiso de ejecución
  • ​rwS​ Con permiso de ejecución

Busqueda. La opción -​ ignora el resto de permisos

  • ​find . -perm 4000​ buscar SUID activado
  • ​find . -perm u+s​ buscar SUID activado
  • ​/usr/bin/ -perm -2000​ Buscar GUID activado
  • ​find /usr/bin/ -perm -g+s​ Buscar GUID activado

Fuse​

Listar que proceso esta usando un archivo

$ fuser -v .
USERPID ACCESS COMMAND
/root: 580 ..c.. bash
AccessNota
cActual directory
eExecuting
fFile open
FFile open with writing
rroot directory
sudo fuser -vn tcp 80
USER PID ACCESS COMMAND
80/tcp: root 1562 F.... apache2
www-data 1564 F.... apache2
www-data 1565 F.... apache2
OpcionesNota
​-v​verbose
​-n​Network
​-k​Kill process accesing file

Ulimit​

ComandoNota
​ulimit -Ha​List hard limits
​ulimit -Sa​List softlimits

Para cambiar un limite basta con seleccionar la opción y dar un valor: ulimit -f 500​ cambiar hard y soft file size. ulimit -Sf 500​ cambiar soft file size.

Para hacer los cambios permanetes el archivo de configuración es: /etc/security/limits.conf​

Sudo​

​/etc/sudoers​ Archivos de configuración

# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

​"from ALL hosts"=("as ALL users":"as ALL groups") "alow ALL comands"​

Permitir acceso a ejecutar systemctl status apache2​ desde el host 192.168.0.222 con el usuario aaa

bbb	192.168.0.222=(aaa) /usr/bin/systemctl status apache2

Editar configuración con visudo​. Cambiar editor con la variable $EDITOR​

Declarar alias. Ejemplo: Host_Alias SERVERS = 192.168.1.7, server1, server2​

  • Host_Alias
  • User_Alias
  • Cmnd_Alias

Nologin​

Para evitar que ningún usuario acceda excepto root, crear un archivo /etc/nologin​ con un mensaje. Para evitar que un usuario no acceda temporalmente: $ sudo usermod -s /sbin/nologin user​

SSH​

SHELL​

CharacteristicsLogin ShellsNon-Login Shells
Reads System Config FilesYes (e.g.,/etc/profile​)No
Reads User Config FilesYes (e.g.,~/.bash_profile​)No (unless explicitly configured)
Environment VariablesSets up from scratchInherits from parent shell
PurposeInteractive login sessionsRunning commands or scripts
Started By​/bin/login​programFrom within another shell or program
Interactive login shell​
FILE CONFIGLEVELNOTE
/etc/profileglobalAplica a todo el sistema
/etc/profile.d/*globalAplica a todo el sistema el directorio
~/.bash_profilelocalConfigurar entorno de bash
~/.bash_loginlocalSolo se usa si no existe ~/.bash_login. Comandos que se usan en login
~/.profilelocalSolo se ejecuta si los anteriores no existen. Carga el directorio ~/bin en variable entorno. Hace source a ~/bashrc
~/.bash_logoutlocalLimpieza de entorno después de logout
Interactive no login shell​
FILE CONFIGLEVELNOTE
/etc/bash.bashrcglobal
~/bashrclocalSources ~/.bash_aliases. User specific functions and variables
Skel​

Variable añadida en /etc/adduser.conf​ el cual contiene el directorio donde crear el sistema de archivos del usuario

Variables​

Las declaración de varaibles con comillas simple usan terminos literales. Declarar variables con doble comillas permite sustitución.

ComandoNota
​readonly reptile=tortoise​Varibale inmutable
​set​Lista todas las variables y funciones declaradas
​unset -v <variable>​
unset -f <function>​
Elimina cualquier variable
​export <variable>​
declare -x <variable>​
Convierte variable local a de entorno. Permite ser heredada
​export -n <variable>​Convierte variable en local
​export​Lista todas las variables en entorno
​env​
printenv <variable>​
Listan todas las variables
​env -i bash​Ejecutar un programa sin variables declaradas
VariableNota
​$DISPLAY​screen number
​$HISTCONTROL​- ignorespace
- ignoredups
- ignoreboth
​$HISTSIZE​Tamaño historial en memoria
​$HISTFILESIZE​Tamaño total en archivo
​$HOME​Home path
​$HOSTNAME​Host name
​$HOSTTYPE​Tipo procesador
​$LANG​Locale
​$LD_LIBRARY_PATH​Shared libary path
​$MAIL​Path donde BASH busca emails
​$MAILCHECK​Frecuencia segundos revision mail
​$PATH​Path de ejecutables
​$SHELL​En mayus variables globales. Lista shell
​$USER​Current user

Variables especiales bash

VariableNota
​$?​Resultado del último comando. 0 = success
​$$​Shell PID
​$!​PID del ultimo comando en backgroud
​$0 - $9​Parametros posicionales de una funcion
​$#​Numero argumentos pasados comando

Variables de scripts

VariableNota
​$*​
$@​
Todos los argumentos pasados al script
​$#​Número de argumentos
​$0​Nombre del script
​ ​$!​ ​PID del último programa ejecutado

La notación para guardar el output de comandos $ OS=`uname -o` ​ o $ OS=$(uname -o)​

Alias​
alias oldshell=sh
alias ls='ls --color=auto'
unalias git-info
alias #list all alias

# Expansion dinámica y estática de los alias comillas
$ alias where?='echo $PWD'
$ where?
/home/user2
$ cd Music
$ where?
/home/user2/Music

$ alias where?="echo $PWD"
$ where?
/home/user2
$ cd Music
$ where?
/home/user2
Read​
echo "Do you want to continue (y/n)?"
read ANSWER
read -p "Type your first name and last name:" NAME SURNAME
Arrays​
declare -a SIZES
SIZES=( 1048576 1073741824 )
echo ${SIZES[0]}
echo ${#SIZES[@]} #Tamaño del array
Condicionales​
CondiciónNota
​&&​Se ejecuta solo si el comando anterior return 0
​-a​If file exists
​-b​If is block file
​-c​If is character file
​-d​If is a directory
​-e​If path exists
​-f​if path exist and is regular file
​-g​If SGUID activated
​-h​If is a symbolic link
​-k​If have sticky bit
​-p​If is a pipe file
​-r​If is readable
​-s​If exist directory and not empty
​-S​If is a socket
​-t​If is open in a terminal
​-u​If SUID activated
​-w​If is writteable
​-x​If is executable
​-O​If is owned by user
​-G​If have the same group as the user
​-N​If was modified since las time accessed
​-nt​If path 1 is newer than path 2
​-ot​If path 1 is older than path 2
​-ef​If file 1 is a hardlink to file 2
​-z​If variable is empty
​-n​If variable is not empty
​!​If is false
​-o​If EXPR1 or EXPR2 is true

User interfaces​

Display name: hostname:displaynumber.screennumber​

Lanzar aplicación en un monitor específico DISPLAY=:0.1 firefox &​

Archivo de configuración: /etc/X11/xorg.conf​

  • InputDevice
  • InputClass
  • Monitor
  • Device
  • Screen
  • ServerLayout

Comando para ver información del servidor X11 xdpyinfo​

VariableNota
​$DISPLAY​X11 listar monitor
​$WAYLAND-DISPLAY​Wayland listar monitor

‍