stu*_*ent 10 linux udev thinkpad xrandr acpi
我有一个带有 nvidia optimus 的联想 thinkpad 和一个迷你坞站系列 3。
我希望在停靠时,如果可能,它应该自动切换到外接显示器,如果我将其断开,它应该自动切换到 thinkpad lcd。
这也应该在启动阶段起作用,因为我必须在那里输入加密磁盘的密码 (dm-crypt)。
我尝试了以下但它不起作用:
我创建了一个文件/etc/acpi/thinkpad-undock.sh
(+ chmod a+x thinkpad-undock.sh
),其中包含以下几行:
#!/bin/sh
xrandr --output LVDS-1 --auto --output DP-5.8 --off
Run Code Online (Sandbox Code Playgroud)
并且 /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
Run Code Online (Sandbox Code Playgroud)
再一次chmod a+x thinkpad-dock.sh
。
手动执行这两个脚本都可以。
比我创建了两个文件来处理事件:
thinkpad-dock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh
Run Code Online (Sandbox Code Playgroud)
并且 thinkpad-undock-lenovo
event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh
Run Code Online (Sandbox Code Playgroud)
然后我重新加载了 acpi 守护进程/etc/init.d/acpid reload
。但是,如果我停靠或取消停靠笔记本电脑,它什么也不做。
我通过执行acpi_listen
然后对接和取消对接笔记本电脑获得了上面的事件编号。
那么有没有关于如何使它工作的想法。
也许该问题已通过某些桌面环境(例如 kde)解决,但我使用的是 xmonad,尽管如此,如上所述,它甚至可以在独立于桌面环境的启动阶段工作。
我正在运行内核版本为 4.4.0-22 的 ubuntu 16.04。
我还尝试添加如下 udev 规则,但没有用:
ENV{EVENT}=="undock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
ENV{EVENT}=="dock", KERNEL=="dock.0", SUBSYSTEM=="platform", RUN+="disper -s"
Run Code Online (Sandbox Code Playgroud)
我只是注意到该文件dock
的值始终为 0,无论笔记本电脑是停靠还是未停靠。
您的脚本未设置 DISPLAY 环境变量。它应该看起来像这样:
#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
Run Code Online (Sandbox Code Playgroud)