Probado en Ubuntu 16.04, 18.04. (Sé que es demasiado tarde para responder, pero esta solución es relevante hoy)
$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
SONY TV
AUO LCD Monitor
Tengo dos monitores conectados. Uno con la computadora portátil y el otro es una pantalla externa. Tan pronto como se conecta o desconecta el monitor externo, este comando refleja el cambio. Necesitas sondear continuamente. Eliminando el --short
opción da información más detallada.
Puede sondear el estado con el siguiente trabajo en segundo plano:
$ while true;
> do
> hwinfo --monitor --short;
> sleep 2;
> done >> monitor.log &
El while true
el bucle se ejecuta infinitas veces. El sleep 2
pausa cada iteración del bucle durante 2 segundos. Y la salida de hwinfo --monitor --short
se adjunta a monitor.log
. Este archivo de registro puede brindarle el historial de actividad del complemento y desconexión del monitor.
FYI:estoy usando un script de python de fondo (daemon) usando el comando anterior (y otros similares) para detectar si alguien está haciendo algunos complementos y complementos de HW con los sistemas en el laboratorio de computación. Si es así, recibo notificaciones apropiadas de que alguien desconectó/encendió un monitor, mouse o teclado casi en tiempo real.
Más información sobre hwinfo
El comando está aquí. Su página man también es una buena fuente.
sudo get-edid
no funcionó para mí (EDITAR:ahora funciona en otra computadora, Lubuntu 14.10; culparía a las diferencias de BIOS, pero eso es una suposición al azar...)
De todos modos bajo X, xrandr --verbose
imprime el bloque EDID. Aquí hay una forma rápida y sucia de extraerlo y pasarlo a parse-edid
:
#!/bin/bash
xrandr --verbose | perl -ne '
if ((/EDID(_DATA)?:/.../:/) && !/:/) {
s/^\s+//;
chomp;
$hex .= $_;
} elsif ($hex) {
# Use "|strings" if you dont have read-edid package installed
# and just want to see (or grep) the human-readable parts.
open FH, "|parse-edid";
print FH pack("H*", $hex);
$hex = "";
}'
Inspirado en la respuesta de Beni, leerá los datos EDID usando xrandr
y extraiga los nombres de los monitores de acuerdo con la especificación EDID, sin necesidad de herramientas externas como parse-edid
:
#!/bin/bash
while read -r output hex conn; do
[[ -z "$conn" ]] && conn=${output%%-*}
echo "# $output $conn $(xxd -r -p <<< "$hex")"
done < <(xrandr --prop | awk '
!/^[ \t]/ {
if (output && hex) print output, hex, conn
output=$1
hex=""
}
/ConnectorType:/ {conn=$2}
/[:.]/ && h {
sub(/.*000000fc00/, "", hex)
hex = substr(hex, 0, 26) "0a"
sub(/0a.*/, "", hex)
h=0
}
h {sub(/[ \t]+/, ""); hex = hex $0}
/EDID.*:/ {h=1}
END {if (output && hex) print output, hex, conn}
' | sort
)
Usa awk
para extraer con precisión el nombre del monitor solo , y sin basura adicional del EDID, por lo tanto, "números mágicos" como 000000fc00
, 26
y 0a
. Finalmente usa xxd
para convertir de hexadecimal a ASCII, imprimiendo un nombre de monitor por línea.
Basado en esta solución, hice una secuencia de comandos útil para cambiar de monitor, que también se puede usar para enumerar simplemente la información del monitor:
$ monitor-switch --list
Connected monitors:
# DFP5 HDMI HT-R391
# DFP7 DVI-I DELL U2412M
$ monitor-switch --list
Connected monitors:
# DisplayPort-1 DisplayPort DELL U2412M
# DisplayPort-3 DisplayPort DELL U2415
# HDMI-A-2 HDMI LG TV