GNU/Linux >> Znalost Linux >  >> Linux

Nástroj pro automatické použití konfigurace RandR, když je připojen externí displej

Pokud jde o nástroj, který může ukládat profily konfigurace monitoru na základě jednotlivých uživatelů a jednotlivých zobrazení, autorandr udělá přesně to.

Můj notebook má kartu NVIDIA, takže místo xrandr používám backend disper. Autorandr použije disper jako backend pro správu vašich monitorů, pokud to nazvete jako autodisper . Pro zbytek tohoto příspěvku jej však budu označovat jako autorandr pro konzistenci.

Profily můžete uložit pomocí autorandr --save profile_name . Spuštěn autorandr sám vám pak poskytne seznam profilů a identifikuje, který z nich je detekován jako aktuální konfigurace.

Například:

$ autorandr
laptop
syncmaster19 (detected)

Pomocí autorandr --change mu můžete říci, aby automaticky načetl vhodný profil pro aktuální konfiguraci . Tento příkaz, spárovaný s udev pravidlem pro jeho spuštění, když je hotplugged, udělá to, co požadujete.

Jako další opatření jsem přidal --default laptop na tento příkaz, který jej nastaví jako výchozí na displej notebooku, pokud není uložen žádný profil, který by odpovídal aktuální konfiguraci. Takže úplný příkaz, který používám k přepínání zobrazení, je:

autorandr --change --default laptop

Bohužel můj počítač nedává žádný udev výstup, když zapojím monitor. Používám proprietární ovladače NVIDIA, takže to není překvapivé. Takže jsem to zatím svázal s XF68Display key (Fn-F8), což je skoro stejně dobré.


Používám tento jednoduchý (domácí) skript, který neustále dotazuje RandR a přepíná mezi LVDS1 a VGA1, když se VGA připojí/odpojí. (Pro HDMI výstupy, v následujícím souboru skriptu změňte všechny VGA1 na HDMI1 )

Je to špinavé řešení, ale funguje dobře.

Je přizpůsoben mému nastavení:s největší pravděpodobností budete muset změnit názvy výstupů RandR (LVDS1 a VGA1 ) a na rozdíl ode mě si pravděpodobně vystačíte s výchozím režimem RandR pro 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

Úplné kroky:

  1. Vložte výše skript (homemadeMonitor.sh ) do vámi preferovaného adresáře

  2. Udělejte soubor .sh spustitelným zadáním následujícího příkazu do terminálu

    chmod +x homemadeMonitor.sh

  3. Spusťte soubor .sh

    ./homemadeMonitor.sh


Odpověď na část otázky „[a] způsob, jak zjistit, že byl připojen monitor“:

Podpora se stále dost liší, ale s nedávnými jádry existuje určitá podpora pro generování událostí udev, když se objeví hotplug display. S jádrem 2.6.38 a hardwarem ATI X1400 se při prvním připojení displeje VGA zobrazí událost, ale žádné události při následném odpojení nebo opětovném připojení displeje. Hardware Intel může mít lepší podporu. Proprietární ovladač NVIDIA aktuálně nepodporuje KMS; Nezkoušel jsem hledat události hotplug na hardwaru NVIDIA, ale pochybuji, že by to fungovalo.

Pokud chcete experimentovat s udev, můžete zkusit následující kroky:

  • aktualizovat na nejnovější jádro
  • ujistěte se, že je povoleno nastavení režimu jádra (KMS). Pokud je povoleno, mělo by být hlášeno ve výstupu vašeho jádra. Můj říká [drm] radeon kernel modesetting enabled a [drm] initializing kernel modesetting
  • spusťte udevadm monitor --property a uvidíte, zda jsou události hlášeny, když (odpojíte) displeje

Pokud dostáváte události udev na hotplug displeje, můžete spustit skript pomocí pravidla udev, jako je:

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

Poznámka: Toto nebude fungovat, pokud používáte GPU nVIDIA s proprietárním binárním ovladačem, protože nepoužívá KMS. nebudete získat všechny události udev.


Linux
  1. Použití nástroje SS pro řešení problémů se sítí

  2. Linux – nástroj pro měření kvality entropie?

  3. Nutty – Nástroj pro diagnostiku sítě pro Ubuntu

  1. Linux – nástroj pro automatické použití konfigurace Randr, když je připojen externí displej?

  2. nástroj podobný teamvieweru pro ssh?

  3. Nástroj pro měření kvality entropie?

  1. Blender – Perfektní nástroj pro tvorbu 3D pro Linux

  2. Deepin System Monitor – Stylový nástroj pro monitorování systému pro OS Deepin

  3. Konfigurace Exim4 pro použití několika externích IP pro odesílání pošty