Altere as configurações do sistema dependendo se um monitor está conectado

6

Atualmente estou usando um laptop com o Ubuntu 12.04. Quando estou trabalhando, conecto um monitor, mouse e teclado. Então fecho a tela dos laptops e uso como um pc normal. Toda vez que eu ligar e ligar, eu tenho que mudar minhas configurações do sistema, porque normalmente meu laptop iria suspender para a memória RAM, quando eu fecho a tela. Também tenho que mudar onde minha placa gráfica deve exibir minha área de trabalho.

Existe alguma maneira de executar algum script quando um monitor externo ou um dispositivo USB está conectado ou desconectado? Se sim, existe alguma maneira de alterar as configurações do meu sistema por um script de shell? Se não, existe alguma outra maneira de fazer isso?

    
por Wauzl 25.09.2012 / 08:28

1 resposta

4

Primeiro - para usar este método - você precisa ver se sua placa gráfica envia um evento udev, quando um monitor VGA está conectado. Para fazer isso, abra um terminal, digite udevadm monitor --property e conecte um monitor. Você deve ver algo assim:

KERNEL[7671.540341] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=2296
SUBSYSTEM=drm
UDEV_LOG=3

UDEV  [7672.099723] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
MAJOR=226
MINOR=0
SEQNUM=2296
SUBSYSTEM=drm
TAGS=:udev-acl:
UDEV_LOG=3
USEC_INITIALIZED=20836591

Se você não receber um evento, não será possível usar esse método.

Em seguida, uma regra para o udev é criada. Isso pode ser feito criando um arquivo /etc/udev/rules.d/90-monitor-hotplug.rules . Para fazer isso, abra um terminal e digite gksudo gedit /etc/udev/rules.d/90-monitor-hotplug.rules . O gksudo é necessário, porque somente o root pode criar arquivos neste diretório. Em seguida, cole a seguinte linha no arquivo e salve-a:

SUBSYSTEM=="drm", ACTION=="change", RUN+="/bin/su user -c '/home/user/bin/monitorhotplug.sh'"

É claro que você deve substituir a palavra user pelo seu próprio nome de usuário. Isso fará com que o udev execute o comando especificado por trás de RUN . O comando executa o arquivo /home/user/bin/monitorhotplug.sh como seu usuário. Este arquivo agora deve ser criado.

Para isso, abra um terminal e digite gedit /home/user/bin/monitorhotplug.sh . Lembre-se de substituir user pelo seu próprio nome de usuário. Agora cole o seguinte script no arquivo e salve-o:

#!/bin/bash

# we need some environment variables
export DISPLAY=:0
export XAUTHORITY=~/.Xauthority
eval $(sed -n '/^#/! { s/^/export /; s/$/;/; p }' ~/.dbus/session-bus/*-${DISPLAY//:/})

# if a VGA monitor is plugged in:
if [ $(cat /sys/class/drm/card0-VGA-1/status) = "connected" ]; then
    # set my power settings
   gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
   gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'
    xrandr --output VGA1 --auto
    # turn off laptop screen
    xrandr --output LVDS1 --off
# in case of anything else reset to standard options
else
   # reset my power settings
   gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'suspend'
   gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'suspend'
   # xrandr does the rest alone
    #xrandr --output VGA1 --off
    #xrandr --output LVDS1 --auto
fi

Agora o arquivo tem que ser feito executável. Para fazer isso, abra um terminal e digite chmod +x /home/user/bin/monitorhotplug.sh .

Agora deve funcionar:  1. Quando você conecta um monitor VGA, sua tela de laptop interna (LVDS) será desligada e seu laptop não será suspenso, se você fechar a tampa.  2. Quando você desligar o monitor, ou qualquer outro evento com monitores, ele irá redefinir as configurações de energia para suspender quando a tampa estiver fechada.

Ainda há um pequeno problema: quando você tiver o seu monitor conectado e fechar a tampa, o Ubuntu irá bloquear a tela, então você tem que mover o mouse e digitar sua senha novamente.

Espero que isso ajude alguém. Eu, pessoalmente, estou curtindo minha pequena estação de encaixe DIY. :)

    
por Wauzl 26.09.2012 / 15:06