¿Existe alguna herramienta que le permita a uno:
- recuerde la configuración actual de RandR (posición, orientación, resolución, etc.) por monitor,
- ¿Aplicar automáticamente la última configuración válida conocida tan pronto como se conecte la pantalla, sin necesidad de jugar con applets o xrandr (1)?
Las configuraciones tendrían que aplicarse por usuario, por pantalla.
Si no existe tal herramienta en la naturaleza, me gustaría armar una yo mismo, pero por lo que puedo ver, no hay forma de decir que se ha enchufado un monitor. ¿Tengo que sondear con xrandr -q de vez en cuando para descubrir que una salida estaba conectada o desconectada, ¿o hay una forma más eficiente de hacerlo? ¿Puede udev estar sintonizado para hacer exactamente eso?
udevadm monitor --property
desde el terminal y enchufar el monitor. Con mi tarjeta, veo un evento cuando está enchufado. Puede usar una regla + RUN en udev y algunas secuencias de comandos bash para obtener lo que desea. Sin embargo, no estoy seguro de cómo podría implementar esto por usuario utilizando udev.Respuestas:
Estoy usando este script simple (casero) que sigue sondeando RandR y cambia entre LVDS1 y VGA1 cuando VGA se conecta / desconecta. (Para salidas HDMI , en el siguiente archivo de script, cambie todo
VGA1
aHDMI1
)Es una solución sucia, pero funciona bien.
Está personalizado para mi configuración: lo más probable es que necesite cambiar los nombres de salida de RandR (
LVDS1
yVGA1
) y, a diferencia de mí , probablemente estará bien con su modo predeterminado de RandR para VGA.Pasos completos:
Ctrl+Alt+t
Navegue a una buena ubicación para crear y almacenar el script de shell de cambio automático. Ejemplo
cd ./Desktop/
Cree y edite el archivo .sh con su editor de texto deseado (aquí, usé pluma. Puede probar nano, vim, etc.). Nómbralo a tu conveniencia. Ejemplo
sudo pluma homemadeMonitor.sh
Edite el archivo y copie y pegue todo desde el script mencionado anteriormente (el que tiene #! / Bin / bash)
Haga que el archivo .sh sea ejecutable escribiendo el siguiente comando en la terminal
sudo chmod +x homemadeMonitor.sh
Ejecute el archivo .sh
./homemadeMonitor.sh
fuente
Respondiendo a la parte "[a] de decir que un monitor ha sido enchufado" parte de la pregunta:
El soporte todavía varía bastante, pero con los núcleos recientes hay algún soporte para generar eventos udev cuando ocurre un hotplug de pantalla. Con el kernel 2.6.38 y el hardware ATI X1400, obtengo un evento la primera vez que conecto una pantalla VGA, pero no hay eventos en las desconexiones o reconexiones posteriores de la pantalla. El hardware de Intel puede tener un mejor soporte. El controlador propietario de NVIDIA actualmente no es compatible con KMS; No he intentado buscar eventos de conexión en caliente en el hardware de NVIDIA, pero dudo que funcione.
Si quieres experimentar con udev, puedes probar los siguientes pasos:
[drm] radeon kernel modesetting enabled
y[drm] initializing kernel modesetting
udevadm monitor --property
y ver si se informan eventos cuando (des) conecta pantallasSi está recibiendo eventos udev en hotplug de pantalla, puede activar un script con una regla udev como:
Nota: Esto no funcionará si usa una GPU nVIDIA con el controlador binario propietario, ya que no usa KMS. Usted no obtener ningún evento udev.
fuente
Con respecto a una herramienta que puede almacenar perfiles de configuración de monitor por usuario y por pantalla, autorandr hará exactamente eso. https://github.com/wertarbyte/autorandr .
Mi computadora portátil tiene una tarjeta NVIDIA, por lo que uso el back-end disper en lugar de xrandr: http://willem.engen.nl/projects/disper/ . Autorandr usará disper como back-end para administrar sus monitores si lo llama como
autodisper
. Sin embargo, para el resto de esta publicación, me referiré a ellaautorandr
por coherencia.Puede guardar perfiles con
autorandr --save profile_name
. Ejecutarautorandr
solo le dará una lista de perfiles e identificará cuál se detecta como la configuración actual.Por ejemplo:
Puede indicarle que cargue automáticamente el perfil apropiado para la configuración actual con
autorandr --change
. Este comando, junto con una regla udev para ejecutarlo cuando está conectado en caliente, haría lo que solicitó.Como precaución adicional, agregué
--default laptop
ese comando, que lo hará predeterminado para la pantalla de la computadora portátil si no hay un perfil guardado que coincida con la configuración actual. Entonces, el comando completo que uso para cambiar de pantalla es:Desafortunadamente, mi máquina no da salida de udev cuando conecto mi monitor en caliente. Estoy usando los controladores propietarios de NVIDIA, así que eso no es sorprendente. Por lo tanto, lo he vinculado a la tecla XF68Display (Fn-F8) por ahora, que es casi tan bueno.
fuente
udev
autorandr
: github.com/phillipberndt/autorandrUsé la regla de udev sugerida anteriormente junto con un script de shell que se parece a
La parte Xauthority es esencial, así como la exportación
DISPLAY
, puede usar echo$DISPLAY
para ver a qué número es igual. Usexrandr -q
para ver los monitores externos que tiene. La última declaración es solo para asegurarse de que nunca esté atascado sin una pantalla.fuente
Un pequeño programa que espera que el servidor X le notifique sobre la configuración cambiada del monitor, y luego ejecuta un comando dado (por ejemplo, el
autorandr
mencionado en otra respuesta) está disponible en: https://bitbucket.org/portix/srandrd/overviewEsta parece ser una solución más limpia que usar
udev
(donde debe preocuparse por encontrar el servidor X correcto, etc.)fuente
Si debe hacer que detecte automáticamente la pantalla cuando se enchufa, parece que la solución más limpia es agregar una regla UDEV para ejecutar un script que contenga sus comandos xrandr. Aquí hay un ejemplo de la solución 1 de un usuario :
Monitoree (salida) eventos UDEV con
udevadm
Este paso será el más importante para cada usuario. Ejecutar
udevadm monitor --environment --udev
. Luego conecta tu cable HDMI.Regla UDEV
Según el resultado del comando anterior, el usuario creó esta regla UDEV en
/etc/udev/rules.d/95-monitor-hotplug.rules
.Tenga en cuenta las variables de entorno utilizadas para que xrandr se ejecute bajo el perfil de usuario.
script xrandr hotplug_monitor.sh
Es posible que desee ajustar las opciones de xrandr para satisfacer sus necesidades.
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:
Las encuestas con xrandr dieron serios problemas de uso en mi nueva computadora portátil (el mouse se detendría periódicamente).
fuente
Cuando utilicé la solución de peoro, obtuve algunos resultados adicionales de xrandr, así que utilicé la opción -c para grep que cuenta el número de coincidencias. Lo adapté para HDMI y también agregué un interruptor de audio:
fuente
Supongo que las personas que miran esta pregunta no son las que quieren usar GNOME, y las que usan GNOME no tendrían que mirar esta pregunta, sino en aras de la exhaustividad:
GNOME tiene esta funcionalidad incorporada. Si cambia la configuración a través de gnome-control-center, gnome-settings-daemon lo recuerda (dentro
.config/monitors.xml
) y lo aplica automáticamente cuando se conecta o desconecta un monitor.Lamentablemente, la configuración en el archivo monitor.xml no está bien documentada. Ver pregunta aquí . Las herramientas de visualización de gnomos tampoco tienen medios para configurar la panorámica, la escala por monitor y no hacen alejamiento. Como muchas personas usan una pantalla de computadora portátil HiDPI junto con una pantalla DPI estándar, las herramientas no son suficientes para obtener una solución viable.
Sin embargo, he visto esto mencionado como un elemento de hoja de ruta para Wayland, así que cuando finalmente llegue, podríamos ver una solución para los problemas mencionados. Hasta entonces, en Gnome, acabo de ejecutar un script de inicio después de un retraso para configurar xrandr manualmente.
fuente
Para simplificar en Xfce, por ejemplo, instale "arandr", que debería estar disponible en sus paquetes de distribución. Configure su pantalla usando "arandr" y guárdela como "displayLayout" por ejemplo. Arandr debería agregarle la extensión ".sh" para que pueda usarse directamente en "function connect ()" como está escrito en el script "hotplug_monitor.sh" mencionado por iyrin anteriormente, por ejemplo:
Para usar el mecanismo de desconexión, agregue en la parte superior de la secuencia de comandos justo debajo de "#! / Bin / bash" de esta manera:
xrandr detectará la pantalla y pasará la salida a awk que la filtrará en función de la expresión regular "conectado" seguido de un dígito que, en esencia, es lo que queremos. En mi opinión, no es necesario hacer coincidir la resolución exacta en la expresión regular porque la pantalla principal se informa como "primaria conectada" seguida de un número, es decir, la resolución. Entonces awk "print $ 1" imprimirá solo la primera columna, que es el nombre del monitor externo en este caso y se almacenará en la variable PLUGGED_EXTERNAL. A continuación, en lugar del nombre para mostrar fijo "HDMI1" en el script, $ PLUGGED_EXTERNAL se puede usar así:
fuente
Editando mi respuesta para simplificar la configuración.
Instale autorandr para automatizar el diseño de pantalla en xrandr, tome el último .deb de https://github.com/nalipaz/autorandr/releases y ejecute:
Configurar autorreferencia con diseños de pantalla almacenados
Como ejemplo, en mi computadora portátil sin ningún monitor conectado, configuré arandr de la forma en que lo quiero y luego ejecuté:
Luego enchufé mi hdmi y volví a configurar Arandr, luego ejecuté:
Después de configurar cada uno de sus diseños, puede ejecutar (reemplace 'mobile' con el nombre favorito anterior, usé mobile):
Ahora que la marca automática está configurada, puede automatizar el proceso instalando un paquete que sondeará las pantallas conectadas y se ejecutará
autorandr --change
tras la detección. Sí, sé sobre udev y puedes configurarlo si funciona para ti, pero en mis pruebas, udev no funcionó para mi hdmi de manera consistente. Solo funcionó 1 de cada 20 enchufes / desenchufes más o menos, y a veces simplemente se detuvo por completo.Descargue el último .deb desde aquí: https://github.com/nalipaz/poll-xrandr/releases/ e instálelo con
Es probable que sea necesario que ejecute más tareas al finalizar
autorandr --change
, autorandr permite que estos comandos se inserten en un archivo llamado ~ / .autorandr / postswitch. Haz lo siguiente:Ahora edite el archivo postswitch para que tenga algo similar a lo siguiente:
Además, es probable que desee agregar autorandr y poll-xrandr a sus startups, algo así como los siguientes dos comandos:
¡Desenchufa o conecta un monitor y mira la magia!
fuente