在lenovo对接和linux上自动切换显示

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,无论笔记本电脑是停靠还是未停靠。

hac*_*rb9 1

您的脚本未设置 DISPLAY 环境变量。它应该看起来像这样:

#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off
Run Code Online (Sandbox Code Playgroud)