GNU/Linux >> Linux Esercitazione >  >> Linux

Uno strumento per applicare automaticamente la configurazione RandR quando è collegato un display esterno

Per quanto riguarda uno strumento in grado di memorizzare i profili di configurazione del monitor in base all'utente e al display, autorandr farà esattamente questo.

Il mio laptop ha una scheda NVIDIA, quindi utilizzo il backend disper invece di xrandr. Autorandr utilizzerà disper come backend per gestire i tuoi monitor se lo chiami come autodisper . Per il resto di questo post, però, lo chiamerò autorandr per coerenza.

Puoi salvare i profili con autorandr --save profile_name . Esecuzione autorandr da solo ti fornirà quindi un elenco di profili e identificherà quale viene rilevato come configurazione corrente.

Ad esempio:

$ autorandr
laptop
syncmaster19 (detected)

Puoi dirgli di caricare automaticamente il profilo appropriato per la configurazione corrente con autorandr --change . Questo comando, abbinato a una regola udev per eseguirlo quando è collegato a caldo, farebbe ciò che hai richiesto.

Come ulteriore precauzione ho aggiunto --default laptop a quel comando, che lo renderà predefinito per il display del laptop se non esiste un profilo salvato che corrisponda alla configurazione corrente. Quindi il comando completo che uso per cambiare display è:

autorandr --change --default laptop

Sfortunatamente la mia macchina non fornisce alcun output udev quando collego a caldo il mio monitor. Sto usando i driver proprietari NVIDIA, quindi non è sorprendente. Quindi per ora l'ho associato al tasto XF68Display (Fn-F8), che è quasi altrettanto buono.


Sto usando questo semplice script (fatto in casa) che continua a eseguire il polling di RandR e passa da LVDS1 a VGA1 quando VGA viene connesso/disconnesso. (Per HDMI output, nel seguente file di script, cambia tutto il VGA1 a HDMI1 )

È una soluzione sporca, eppure funziona bene.

È personalizzato per la mia configurazione:molto probabilmente dovrai modificare i nomi di output di RandR (LVDS1 e VGA1 ) e, diversamente da me, probabilmente starai bene con la tua modalità RandR predefinita per 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

Passaggi completi:

  1. Metti sopra lo script (homemadeMonitor.sh ) nella tua directory preferita

  2. Rendi eseguibile il file .sh digitando il seguente comando nel terminale

    chmod +x homemadeMonitor.sh

  3. Esegui il file .sh

    ./homemadeMonitor.sh


Rispondendo alla parte della domanda "[un] modo per sapere che un monitor è stato collegato":

Il supporto varia ancora un po', ma con i kernel recenti c'è un certo supporto per la generazione di eventi udev quando si verifica un hotplug del display. Con il kernel 2.6.38 e l'hardware ATI X1400, ottengo un evento la prima volta che collego uno schermo VGA ma nessun evento alle successive disconnessioni o riconnessioni dello schermo. L'hardware Intel potrebbe avere un supporto migliore. Il driver proprietario NVIDIA attualmente non supporta KMS; Non ho provato a cercare eventi hotplug su hardware NVIDIA, ma dubito che funzionerebbe.

Se vuoi sperimentare con udev puoi provare i seguenti passi:

  • aggiorna al kernel più recente
  • assicurati che l'impostazione della modalità kernel (KMS) sia abilitata. Se abilitato, dovrebbe essere segnalato nell'output del kernel. Il mio dice [drm] radeon kernel modesetting enabled e [drm] initializing kernel modesetting
  • esegui udevadm monitor --property e verifica se gli eventi vengono segnalati quando (s-)connetti i display

Se ricevi eventi udev su display hotplug, puoi attivare uno script con una regola udev come:

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

Nota: Questo non funziona se utilizzi una GPU nVIDIA con il driver binario proprietario, poiché non utilizza KMS. No ottenere qualsiasi evento udev.


Linux
  1. Utilizzo dello strumento SS per la risoluzione dei problemi di rete

  2. Linux:uno strumento per applicare automaticamente la configurazione Randr quando il display esterno è collegato?

  3. Blender:lo strumento di creazione 3D perfetto per Linux

  4. Deepin System Monitor – Un elegante strumento di monitoraggio del sistema per Deepin OS

  5. strumento simile a teamviewer per ssh?

Doppler:uno strumento di monitoraggio remoto a configurazione zero

Visualizza l'utilizzo della larghezza di banda della rete utilizzando lo strumento Bandwhich

Visualizza i cheatsheet dei comandi Linux con lo strumento Tealdeer

Visualizza le informazioni di rete in Linux utilizzando quale strumento IP

Un'introduzione a Cockpit, uno strumento di amministrazione basato su browser per Linux

Skanlite – Un semplice strumento di scansione delle immagini per Linux