В настоящее время я использую ноутбук под управлением Ubuntu 12.04. Когда я на работе, я подключаю монитор, мышь и клавиатуру. Затем я закрываю экран своего ноутбука и использую его как обычный компьютер. Каждый раз, когда я подключаю его и подключаю, мне приходится менять настройки системы, потому что обычно мой ноутбук зависает в ОЗУ, когда я закрываю экран. Также я должен изменить, где моя графическая карта должна отображать мой рабочий стол.
Есть ли способ выполнить какой-либо сценарий, когда внешний монитор или USB-устройство подключено или отключено? Если да, есть ли способ изменить настройки системы с помощью сценария оболочки? Если нет, есть ли другой способ сделать это?
Сначала - чтобы использовать этот метод - вам нужно посмотреть, отправляет ли ваша видеокарта событие udev, когда подключен монитор VGA. Для этого откройте терминал, введите udevadm monitor --property
и подключите монитор. Вы должны увидеть что-то вроде этого:
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
Если вы не получите событие, то использовать этот метод невозможно.
Затем создается правило для udev. Это можно сделать, создав файл /etc/udev/rules.d/90-monitor-hotplug.rules
. Для этого откройте терминал и введите gksudo gedit /etc/udev/rules.d/90-monitor-hotplug.rules
. gksudo
необходим, потому что только root может создавать файлы в этой директории. Затем вставьте в файл следующую строку и сохраните ее:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/bin/su user -c '/home/user/bin/monitorhotplug.sh'"
Конечно, вы должны заменить слово user
своим именем пользователя. Это заставит udev запустить команду, указанную в RUN
. Команда выполняет файл /home/user/bin/monitorhotplug.sh
как ваш пользователь. Этот файл должен быть создан.
Для этого откройте терминал и введите gedit /home/user/bin/monitorhotplug.sh
. Не забудьте заменить user
вашим собственным именем пользователя. Теперь вставьте следующий скрипт в файл и сохраните его:
#!/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
Теперь файл должен быть выполнен исполняемым. Для этого откройте терминал и введите chmod +x /home/user/bin/monitorhotplug.sh
.
Теперь это должно работать: 1. Когда вы подключаете монитор VGA, ваш внутренний экран ноутбука (LVDS) будет выключен, и ваш ноутбук не будет зависать, если вы закроете крышку. 2. Когда вы отключаете монитор или происходит любое другое событие с мониторами, он сбрасывает настройки питания для приостановки при закрытии крышки.
Есть еще одна маленькая проблема: когда вы подключите монитор и закроете крышку, Ubuntu заблокирует экран, поэтому вам придется двигать мышь и снова вводить пароль.
1121 Надеюсь, это кому-нибудь поможет. Я лично наслаждаюсь моей маленькой док-станцией. :)