我目前使用的是运行 Ubuntu 12.04 的笔记本电脑。上班时,我会插入显示器、鼠标和键盘。然后,我会关闭笔记本电脑的屏幕,将其用作普通 PC。每次插入和拔出时,我都必须更改系统设置,因为通常情况下,当我关闭屏幕时,我的笔记本电脑会挂起到 RAM。此外,我还必须更改显卡显示桌面的位置。
有没有办法在插入或拔出外部显示器或 USB 设备时执行某些脚本?如果可以,有没有办法通过 shell 脚本更改我的系统设置?如果没有,还有其他方法吗?
答案1
首先,为了使用此方法,您需要查看当插入 VGA 显示器时,您的显卡是否会发送 udev 事件。为此,打开一个终端,输入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 将锁定屏幕,因此你必须移动鼠标并再次输入密码。
我希望这对某些人有帮助。我个人很喜欢我的小型 DIY 扩展坞。:)