Отключить отключенные дисплеи (xrandr)


17

У меня есть ноутбук с двумя видеовыходами, которые я использую дома (HDMI1, VGA1). Чтобы включить их, я делаю это:

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

Когда я хочу пойти на работу, я беру свой ноутбук, но сначала запускаю следующее:

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

И тогда это делает мой ноутбук активным, как и должно быть.

Проблема, с которой я сталкиваюсь, заключается в том, что иногда я не помню, чтобы отключить два экрана, прежде чем мой компьютер для работы. Когда я приезжаю, я попробовать различные комбинации --outputи , --offно я не могу получить мой экран повторно включен.

Это вывод, который я запускаю xrandrбез отображения:

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

Почти каждая команда, которую я пробовал, возвращает:

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

Как будто два монитора не отказываются от своего CRTC, и поскольку мое оборудование поддерживает только 2, оно заблокировано, пока я не подключу эти мониторы и не отключу их.

Ответы:


11

Вы можете поместить всю свою конфигурацию в одну команду, например:

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

и это должно сработать, также, поскольку сложно написать команду (слишком долго), вы можете создать сценарий, который тестирует подключенные в данный момент экраны и выполняет необходимые настройки. (Вы можете добавить к сочетанию клавиш)

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

это не необычный сценарий, но может работать для вас.


1

Похоже, что при отключении экрана событие не создается. иметь сценарий опроса xrandr довольно тяжело, но вы можете посмотреть в / sys / class / drm / * / status и опросить эти файлы, а затем выполнить требуемое действие xrandr, когда статус изменится с «связан» на что-то другое (или полностью исчезнет).


1

Я знаю, что это очень старая тема, но я хотел поделиться тем, как я решил проблему, используя вашу информацию о включении и выключении мониторов и их отключении. Я использовал программу под названием autorandr и тогда просто настроил свой дисплей на два монитора autorandr --save docked. Затем я использовал это xrandr --output VGA --off, затем отключил мой монитор, а затем autorandr --save mobile. Autorandr автоматически переключается между различными режимами в зависимости от того, что вы подключили или отключили. Надеюсь, это поможет любому, кто наткнется на это! Также это похоже на мой первый настоящий ответ, поэтому дайте мне знать, могу ли я что-то изменить, чтобы быть более понятным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.