在联想扩展坞和Linux上自动切换显示


8

我有一个带有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

并且 /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

再来一次chmod a+x thinkpad-dock.sh

手动执行两个脚本都可以。

比我创建了两个文件来处理事件:

thinkpad-dock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004010
action=/etc/acpi/thinkpad-dock.sh

并且 thinkpad-undock-lenovo

event=ibm/hotkey LEN0068:00 00000080 00004011
action=/etc/acpi/thinkpad-undock.sh

然后,我向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"

我只是注意到dock,无论便携式计算机是对接还是未对接,文件始终为0。

Answers:


0

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

#!/bin/sh
export DISPLAY=:0
xrandr --output LVDS-1 --auto --output DP-5.8 --off

谢谢。我试过了,但是没有用。我也看不出为什么这应该是错误的,因为如果直接执行脚本,脚本可以工作(带或不带export语句)。我猜想脚本不是由acpid执行的。
学生

0

我在设置DISPLAYXAUTHORITY增加一点睡眠方面都很幸运,例如

export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
sleep 3
xrandr ...

0

我有一个类似的设置,但是我从来没有追求对基座反应的解决方案。这是一个有趣的。

我要做的是使用Gnome的显示管理器将LCD显示器设置为“关闭”,而将外部显示器设置为主显示器。这样,每当我将笔记本电脑放在扩展坞上时,它就会切换到外部显示器。当我提起它时,它将交换回LCD。

在控制台上进行此操作(从dm-crypt安装启动)也可以,但是有其细微差别。如果盖子合上,我将笔记本电脑放在扩展坞上并打开,它会自动在外部显示器(包括BIOS屏幕在内的所有设备)上启动。如果盖子是打开的,则只有在登录GDM后才能进行更换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.