¿Hay algún evento que se active cuando conecto o desconecto un monitor externo en el DisplayPort de mi computadora portátil? ACPID y UDEV no reaccionan en absoluto.
Estoy usando gráficos integrados en un chip Intel. Aquí hay una discusión similar que ya tiene un par de años.
No quiero usar el sondeo, pero necesito tener alguna configuración que establezca la configuración de la pantalla automáticamente, dependiendo de si la pantalla está conectada.
udev
monitors
acpi
multi-monitor
janoliver
fuente
fuente
Respuestas:
NOTA: Esto se probó en una computadora portátil con una tarjeta gráfica impulsada por i915.
Antecedentes
NOTA: Cuando se conecta una nueva pantalla, no se envía ningún evento al host, esto se mantuvo incluso después de mi última edición. Entonces, la única forma es usar encuestas. Tratando de hacerlos lo más eficientes posible ...
EDITAR # 3
Finalmente hay una mejor solución (a través de ACPI):
Todavía no hay ningún evento, pero ACPI parece más eficiente que
xrandr
preguntar. (Nota: Esto requiere que se carguen los módulos del núcleo ACPI, pero no requiere privilegios de root).Mi solución final (usando bash):
Ahora una prueba:
Está enchufado, así que ahora lo desconecto:
NOTA:
${1:+*-1+1}
permite que un booleano argumento: si algo está presente , se invierte la respuesta:( crtState >> 4 ) * -1 + 1
.y el guión final:
ADVERTENCIAS: más ligero
xrandr
, pero no sin importancia con un retraso menor a 0.02 segundos, ¡el script Bash irá a la parte superior del proceso de comedores de recursos (top
)!Si bien esto cuesta ~ 0.001 segundos:
Esto requiere ~ 0.030 segundos:
¡Esto es grande! Entonces, dependiendo de lo que necesite,
delay
podría establecerse razonablemente entre0.5
y2
.EDITAR # 2
Finalmente encontré algo, usando esto:
Descargo de responsabilidad importante: ¡ Jugar con
/proc
y/sys
entradas podría dañar su sistema! Así que no intentes lo siguiente en sistemas de producción.... después de una limpieza de entradas no deseadas:
He podido leer esto:
Cuando conecto, desconecto y vuelvo a enchufar el cable del monitor.
Respuesta originalCuando se consulta la configuración (en ejecución
system/preferences/monitor
oxrandr
), las tarjetas gráficas realizan un tipo de exploración , por lo que la ejecución lexrandr -q
brinda la información, pero debe sondear el estado.He escaneado todos los registros (kernel, daemon, X, etc.) buscando en
/proc
&/sys
, y claramente parece que no existe nada que satisfaga su solicitud.También he intentado esto:
Después de todo eso, si ejecuta
System/Preferences/Monitor
mientras no se ha enchufado una nueva pantalla, ni se ha desenchufado, la herramienta aparecerá simplemente (normalmente). Pero si ha conectado o desconectado una pantalla anteriormente, a veces ejecutará esta herramienta y verá que su escritorio realiza un tipo de reinicio o actualización (lo mismo si ejecutaxrandr
).Esto parece confirmar que esta herramienta solicita
xrandr
(o funciona de la misma manera) al sondear el estado periódicamente, comenzando en el momento en que se ejecuta.Podrías probarlo tú mismo:
Esto mostrará cuántas pantallas (pantallas) están conectadas, durante 10 segundos.
Mientras esto se ejecuta, conecte y / o desconecte su pantalla / monitor y vea lo que sucede. Para que pueda crear una pequeña función de prueba de Bash:
que sería utilizable como en:
Pero tenga cuidado,
xrandr
toma alrededor de 0.140 segundos a 0.200 segundos mientras no se produce ningún cambio en los enchufes y hasta 0.700 segundos cada vez que algo se conectó o desconectó justo antes ( NOTA: Parece que no consume recursos).EDITAR # 1
Para asegurarme de que no estoy enseñando algo incorrecto, busqué en la Web y en los documentos, pero no encontré nada sobre DBus y pantallas .
Finalmente, corrí en dos ventanas diferentes
dbus-monitor --system
(también he estado jugando con opciones) y el pequeño script que escribí:... y nuevamente enchufado, que desenchufó el monitor, muchas veces. Entonces ahora podría decir:
xrandr -q
para saber si un monitor está enchufado o no.Pero tenga cuidado, porque no parece haber otras formas. Por ejemplo,
xrandr
parece compartir esta información, por lo que mi escritorio GNOME cambiaráxinerama
automáticamente ... cuando ejecutéxrandr
.Algunos documentos
fuente
Las siguientes líneas aparecieron en
udevadm monitor
al conectar un monitor al conector VGA. Entonces, podría haber una manera de resolver esto.
fuente
Para aquellos que, por cualquier razón, no quieren tomar la ruta de conexión en caliente, aún es posible no sondear dentro de un script usando inotifywait:
Es mejor invocarlo desde su .xsessionrc, sin olvidar el final &. Las encuestas con xrandr dieron serios problemas de uso en mi nueva computadora portátil (el mouse se detendría periódicamente).
fuente
/proc
y simplemente hacerloinotifywait -q -e close /sys/class/drm/card0-DP-2/status
no terminó al desconectar DP-2 en mi sistemaMe quedé con el uso de srandrd . Monitorea los eventos X y activa su script cuando una pantalla se conecta o desconecta.
fuente
¡Obviamente debería haber algo! :) / sys filesystem le dice al usuario espacio qué hardware está disponible, por lo que las herramientas de espacio de usuario (como udev o mdev) pueden llenar dinámicamente un directorio "/ dev" con nodos de dispositivos que representan el hardware actualmente disponible. Linux proporciona dos interfaces hotplug: / sbin / hotplug y netlink.
Hay una pequeña demostración de C en el siguiente archivo. http://www.kernel.org/doc/pending/hotplug.txt
fuente
La mayoría del software de sistema / aplicación en Linux hoy en día utiliza algunas técnicas de IPC para comunicarse entre sí. D-Bus ahora se usa principalmente con aplicaciones GNOME, y podría ayudar.
Revista Linux:
wiki:
Incluso hay una biblioteca de Python para esto, y ubuntu recientemente usó esta habilidad que llamó " zeitgeist ".
fuente
Gráficamente puede ver si se reconoce el monitor
Monitor
, sé que puede encontrarlo en Ubuntu, Fedora y otros en esta ubicación (o similar).Y puede encender / apagar cualquier monitor que desee o usar ambos al mismo tiempo con una imagen duplicada en ambos monitores o monitores independientes
fuente