Desativar monitores desconectados (xrandr)


17

Eu tenho um laptop com duas saídas de vídeo que uso quando estou em casa (HDMI1, VGA1). Para habilitá-los, eu faço o seguinte:

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

Quando quero ir trabalhar, pego meu laptop, mas primeiro executo o seguinte:

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

E isso deixa o monitor do meu laptop ativo como deveria.

O problema que encontro é que às vezes não lembro de desativar as duas telas antes de levar o computador ao trabalho. Quando eu chegar, eu tento várias combinações de --outpute --offmas eu não posso começar minha tela re-ativado.

Esta é a saída que eu começo executando xrandrsem nada exibido:

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

Quase todos os comandos que tentei retornam:

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

É como se os dois monitores não estivessem desistindo do CRTC e, como meu hardware suporta apenas 2, ele fica bloqueado até eu conectar esses monitores e desativá-los.

Respostas:


11

Você pode colocar toda a sua configuração em apenas um comando, como:

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

e isso deve dar certo, também porque é um comando difícil de escrever (muito longo), você pode criar um script que teste as telas atualmente conectadas e faça a configuração desejada. (você pode adicionar um atalho de tecla)

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

não é um roteiro chique, mas pode funcionar para você.


1

Parece não haver um evento gerado quando uma tela é desconectada, infelizmente. ter uma pesquisa de script xrandr é bastante pesado, mas você pode consultar / sys / class / drm / * / status e pesquisar esses arquivos e executar a ação xrandr necessária quando o status muda de 'conectado' para outra coisa (ou desaparece completamente).


1

Sei que esse é um encadeamento super antigo, mas queria compartilhar como resolvi o problema, usando suas informações sobre como ligar e desligar os monitores e depois desconectá-los. Eu usei um programa chamado autorandr e basicamente configurei meu monitor com dois monitores autorandr --save docked. Então eu usei isso xrandr --output VGA --off, depois desconectei meu monitor, seguido por autorandr --save mobile. O Autorandr alterna automaticamente entre modos diferentes, dependendo do que você conectou ou desconectou. Espero que ajude qualquer um que tropeçar nisso! Além disso, essa é a minha primeira resposta real, então, deixe-me saber se posso mudar alguma coisa para ficar mais claro.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.