Wyłącz wyświetlacze niepodłączone (xrandr)

17

Mam laptopa z dwoma wyjściami wideo, z których korzystam, gdy jestem w domu (HDMI1, VGA1). Aby je włączyć, robię to:

xrandr --output HDMI1 --right-of LVDS1 --auto
xrandr --output LVDS1 --off
xrandr --output VGA1 --right-of HDMI1 --auto

Kiedy chcę iść do pracy, biorę laptopa, ale najpierw uruchamiam następujące czynności:

xrandr --output VGA1 --off
xrandr --output LVDS1 --left-of HDMI1 --auto
xrandr --output HDMI1 --off

I wtedy ekran mojego laptopa jest aktywny tak, jak powinien.

Problem, z którym się spotykam, polega na tym, że czasami nie pamiętam, aby wyłączyć dwa ekrany przed zabraniem komputera do pracy. Kiedy przyjeżdżam, staram różne kombinacje --outputi --offale nie mogę dostać mój ekran ponownie włączona.

Oto dane wyjściowe, które uruchamiam xrandrbez wyświetlania niczego:

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
LVDS1 connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1024x768       60.0··
   800x600        60.3     56.2··
   640x480        59.9··
VGA1 disconnected 1920x1080+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
HDMI1 disconnected 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
DP1 disconnected (normal left inverted right x axis y axis)
  1920x1080 (0x4c)  148.5MHz
        h: width  1920 start 2008 end 2052 total 2200 skew    0 clock   67.5KHz
        v: height 1080 start 1084 end 1089 total 1125           clock   60.0Hz

Niemal każde polecenie, które próbowałem, zwraca:

xrandr: Configure crtc 2 failed
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  21 (RRSetCrtcConfig)
  Serial number of failed request:  40
  Current serial number in output stream:  40

To tak, jakby dwa monitory nie rezygnują z CRTC, a ponieważ mój sprzęt obsługuje tylko 2, jest zablokowany, dopóki nie podłączę tych monitorów i nie wyłączyłem ich.


źródło

Odpowiedzi:

11

Możesz umieścić całą konfigurację w jednym poleceniu, na przykład:

xrandr --output VGA1 --off --output HDMI1 --off --output LVDS1 --left-of HDMI1 --auto

i to powinno zadziałać, ponieważ ponieważ trudno jest napisać polecenie (zbyt długo), możesz utworzyć skrypt, który testuje aktualnie podłączone ekrany i dokonuje żądanej konfiguracji. (możesz dodać do skrótu klawiaturowego)

if [ -z `xrandr --query | grep "HDMI1 connected"` ]
then
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --off \
        --output LVDS1 --mode 1366x768 --pos 0x0 --rotate normal \
        --output VGA1 --off
else
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --mode 1920x1080 --pos 0x0 --rotate normal --primary \
        --output LVDS1 --off --output VGA1 --off
fi

to nie jest wymyślny scenariusz, ale może Ci pomóc.

Agomezl
źródło
1

Niestety zdarza się, że zdarzenie nie jest generowane po odłączeniu ekranu. sondowanie skryptu xrandr jest dość ciężkie, ale możesz zajrzeć do / sys / class / drm / * / status i odpytać te pliki, a następnie podjąć wymaganą akcję xrandr, gdy status zmieni się z „połączony” na coś innego (lub całkowicie zniknie).

Cwissy
źródło
1

Wiem, że to bardzo stary wątek, ale chciałem podzielić się tym, jak rozwiązałem problem, korzystając z informacji o włączaniu i wyłączaniu monitorów, a następnie ich odłączaniu. Użyłem programu o nazwie autorandr i właściwie po prostu skonfigurowałem swój wyświetlacz z dwoma monitorami autorandr --save docked. Potem użyłem tego xrandr --output VGA --off, potem odłączyłem monitor, a potem autorandr --save mobile. Autorandr automatycznie przełącza się między różnymi trybami w zależności od tego, co zostało podłączone lub odłączone. Mam nadzieję, że pomoże to każdemu, kto się na to natknie! Jest to również moja pierwsza prawdziwa odpowiedź, więc daj mi znać, czy mogę coś zmienić, aby było bardziej jasne.

ViperZer0
źródło