GNU/Linux >> Tutoriales Linux >  >> Linux

Una herramienta para aplicar automáticamente la configuración de RandR cuando se conecta una pantalla externa

Con respecto a una herramienta que puede almacenar perfiles de configuración de monitor por usuario y por pantalla, autorandr hará exactamente eso.

Mi computadora portátil tiene una tarjeta NVIDIA, por lo que uso el backend dispersor en lugar de xrandr. Autorandr usará disper como backend para administrar sus monitores si lo llama como autodisper . Sin embargo, para el resto de esta publicación, me referiré a ella como autorandr por consistencia.

Puedes guardar perfiles con autorandr --save profile_name . Ejecutando autorandr por sí solo le dará una lista de perfiles e identificará cuál se detecta como la configuración actual.

Por ejemplo:

$ autorandr
laptop
syncmaster19 (detected)

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, he agregado --default laptop a ese comando, que lo hará predeterminado en la pantalla de la computadora portátil si no hay un perfil guardado que coincida con la configuración actual. Así que el comando completo que uso para cambiar de pantalla es:

autorandr --change --default laptop

Desafortunadamente, mi máquina no da ninguna salida udev cuando conecto mi monitor en caliente. Estoy usando los controladores patentados de NVIDIA, por lo que no es sorprendente. Así que lo he vinculado a la tecla XF68Display (Fn-F8) por ahora, que es casi igual de bueno.


Estoy usando este script simple (casero) que sigue sondeando RandR y cambia entre LVDS1 y VGA1 cuando VGA se conecta/desconecta. (Para HDMI salidas, en el siguiente archivo de script, cambie todos los VGA1 a HDMI1 )

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 y VGA1 ) y, a diferencia de mí, probablemente estará bien con su modo predeterminado RandR para VGA.

#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
    echo "Switching to VGA1"
    xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    MONITOR=VGA1
}
function DeactivateVGA {
    echo "Switching to LVDS1"
    xrandr --output VGA1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
    [ $MONITOR = "VGA1" ]
}
function VGAConnected {
    ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
    if ! VGAActive && VGAConnected
    then
        ActivateVGA
    fi

    if VGAActive && ! VGAConnected
    then
        DeactivateVGA
    fi

    sleep 1s
done

Pasos completos:

  1. Coloque el script anterior (homemadeMonitor.sh ) en su directorio preferido

  2. Haga que el archivo .sh sea ejecutable escribiendo el siguiente comando en la terminal

    chmod +x homemadeMonitor.sh

  3. Ejecute el archivo .sh

    ./homemadeMonitor.sh


Respondiendo a la parte de la pregunta "[una] forma de saber que se ha conectado un monitor":

El soporte todavía varía un poco, pero con kernels recientes hay cierto soporte para generar eventos udev cuando ocurre una conexión en caliente de la 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 desconexiones o reconexiones posteriores de la pantalla. El hardware Intel puede tener un mejor soporte. El controlador patentado de NVIDIA actualmente no es compatible con KMS; No he intentado buscar eventos hotplug en el hardware de NVIDIA, pero dudo que funcione.

Si desea experimentar con udev, puede probar los siguientes pasos:

  • actualizar al núcleo más nuevo
  • asegúrese de que la configuración del modo kernel (KMS) esté habilitada. Si está habilitado, debe informarse en la salida de su kernel. El mio dice [drm] radeon kernel modesetting enabled y [drm] initializing kernel modesetting
  • ejecutar udevadm monitor --property y vea si se informan eventos cuando (des)conecta pantallas

Si obtiene eventos de udev en pantalla hotplug, puede activar un script con una regla de udev como:

ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"

Nota: Esto no funciona si usa una GPU nVIDIA con el controlador binario patentado, ya que no usa KMS. no obtener cualquier evento udev.


Linux
  1. Uso de la herramienta SS para la resolución de problemas de red

  2. Linux:¿herramienta para medir la calidad de la entropía?

  3. Nutty:una herramienta de diagnóstico de red para Ubuntu

  4. Configuración de Exim4 para usar varias ip externas para el envío de correo

  5. Definición de una nueva ubicación para los archivos de configuración de syslinux al configurar PXELinux

Doppler:una herramienta de monitoreo remoto de configuración cero

Utilización del ancho de banda de la red de visualización con la herramienta Bandwhit

Mostrar hojas de trucos de comandos de Linux con la herramienta Tealdeer

Mostrar información de red en Linux usando la herramienta What IP

Una introducción a Cockpit, una herramienta de administración basada en navegador para Linux

Skanlite:una herramienta simple de escaneo de imágenes para Linux