根据显示器是否插入来更改系统设置

根据显示器是否插入来更改系统设置

我目前使用的是运行 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 扩展坞。:)

相关内容