Seu script não define a variável de ambiente DISPLAY. Deve ficar assim:
#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
Eu tenho um thinkpad da lenovo com nvidia optimus e uma mini-estação de estação de série 3 .
Eu quero que, enquanto estiver encaixado, ele possa alternar automaticamente para um monitor externo, se possível, e se eu o desancorar, ele deverá alternar para o lcd do thinkpad automaticamente.
Isso também deve funcionar no estágio de inicialização porque eu tenho que digitar uma senha para o disco criptografado (dm-crypt).
Eu tentei o seguinte, mas não funciona:
Eu criei um arquivo /etc/acpi/thinkpad-undock.sh
(+ chmod a+x thinkpad-undock.sh
) que contém as seguintes linhas:
#!/bin/sh
xrandr --output LVDS-1 --auto --output DP-5.8 --off
e também /etc/acpi/thinkpad-dock.sh
#!/bin/sh
prime-select nvidia # ensures that nvidia card is selected
xrandr --output LVDS-1 --off --output DP-5.8 --auto
E novamente chmod a+x thinkpad-dock.sh
.
Executar os dois scripts manualmente funciona.
Então criei dois arquivos para manipular os eventos:
thinkpad-dock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh
e também thinkpad-undock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh
Depois, recarreguei o daemon de acpi com /etc/init.d/acpid reload
. No entanto, se eu encaixar ou desacoplar o laptop, ele não faz nada.
Eu obtive o número do evento acima executando acpi_listen
e, em seguida, acoplando e desacoplar o laptop.
Então, há alguma ideia de como fazer isso funcionar?
Talvez o problema seja resolvido por algum ambiente de desktop, por exemplo, o kde, mas estou usando o xmonad e, no entanto, como indicado acima, ele deve funcionar mesmo no estágio de inicialização, independentemente do ambiente de área de trabalho.
Estou executando o Ubuntu 16.04 com a versão do kernel 4.4.0-22.
Eu também tentei adicionar uma regra do udev como segue, mas não funcionou:
ENV{EVENT}=="undock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
ENV{EVENT}=="dock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
Acabei de notar que o arquivo dock
sempre tem o valor 0, independentemente de o laptop estar encaixado ou desacoplado.
Seu script não define a variável de ambiente DISPLAY. Deve ficar assim:
#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
Tive sorte ao definir DISPLAY
e XAUTHORITY
, além de adicionar uma pequena suspensão, por exemplo,
export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...
Eu tenho uma configuração semelhante, no entanto, nunca perseguei a solução de reagir à doca. É interessante.
O que eu faço é usar o gerenciador de telas do Gnome para definir o display LCD como 'off' e o display externo como o principal. Dessa forma, sempre que coloco o laptop no encaixe, ele passa para o monitor externo. Quando eu o levanto, ele volta para o LCD.
Ter isso no console (arrancar de uma instalação dm-crypt) também funciona, mas tem suas nuances. Se a tampa estiver fechada, eu coloco o laptop no dock e o ligo, ele inicializa automaticamente no monitor externo (tudo, incluindo as telas do BIOS, o lote). Se a tampa estiver aberta, ela será trocada apenas após o login no GDM.