在lenovo坞站和linux上自动切换显示

在lenovo坞站和linux上自动切换显示

我有一台配备 nvidia optimus 的 lenovo 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,尽管如此,如上所述,它甚至应该在启动阶段独立于桌面环境工作。

我正在运行 ubuntu 16.04,内核版本为 4.4.0-22。

我还尝试添加 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。

答案1

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

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

答案2

我很幸运地设置了两者DISPLAYXAUTHORITY添加了一个小睡眠,例如

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

答案3

我有类似的设置,但是我从未追求对码头做出反应的解决方案。这是一件有趣的事。

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

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

答案4

你需要这样的东西:

udev(从 lsusb 更改 idVendor)

    ACTION=="add", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="****", RUN+="/local/run.sh /local/udev-dplink-on.sh"
    ACTION=="remove", ATTRS{idVendor}=="05e3", ATTRS{idProduct}=="****", RUN+="/local/run.sh /local/udev-dplink-off.sh"

apt-get 安装在

运行sh

    #!/bin/bash

    echo $1 | at now

更多关于https://www.eovao.com/en/a/Display%20Link%20Dock%20Ubuntu%20Linux/6/displaylink-dock-in-ubuntu-with-kvm-switch-usb-3.0

相关内容