设备唤醒/解冻时自动运行自动分散

设备唤醒/解冻时自动运行自动分散

我使用的是 Thinkpad W510,经常更换位置。我使用 disper 和 auto-disper 来更改屏幕配置文件(未对接;笔记本电脑屏幕 + 外接屏幕;两个外接屏幕)。

我想auto-disper --change在醒来后运行,因此我输入了以下脚本/etc/pm/sleep.d

#!/bin/bash

case "$1" in
    thaw | resume )
        auto-disper --change &> /home/myHome/autodisper_on_wake.txt
        ;;
esac

唤醒后,我收到以下内容autodisper_on_wake.txt,表明脚本确实触发了:

Assuming disper defaults...
'NoneType' object has no attribute 'endswith'
Unable to fingerprint display configuration
home
school
undocked

但是没有发生任何变化——尽管在唤醒我的机器之前拔掉了我的显示器(从配置文件“学校”转到配置文件“未对接”),我仍然处于配置文件“学校”。

有什么想法如何进行吗?(FWIW,我更改了 autorandr 以使 PROFILE 和 CONFIG 指向我的绝对主目录,而不是 ~ [我认为唤醒脚本可能以 root 身份执行,因此它会在 ~root 中查找配置文件数据])。

答案1

我在谷歌上搜索了这个自动分散的东西,并在https://github.com/wertarbyte/auto-disper并查看了源代码。它似乎正在运行基于 X11 的命令,但您的 pm-script 可能不是在 X11 环境中运行的。没有干净的方法可以做到这一点,但如果您假设您的 X 会话将在显示器 0 上运行(如果您是唯一以图形方式登录的人,通常就是这种情况),您可以通过以您的用户身份运行命令并设置 DISPLAY 环境变量来使其工作。

#!/bin/bash

case "$1" in
    thaw | resume )
        sudo -u yourusername env DISPLAY=:0 auto-disper --change &> /home/myHome/autodisper_on_wake.txt
    ;;
esac

答案2

这对我有用(我使用的是带有 lightdm 的 Ubuntu 12.04):

#!/bin/bash

USERNAME="xxx"
export DISPLAY=":0.0"
export HOME=/home/$USERNAME

if [ "$1" = "suspend" ]
then
    echo "Switching back disper"
    su $USERNAME -c "/usr/bin/python /usr/bin/disper -s" 
fi

if [ "$1" = "resume" ]
then
    echo "Change disper" 
    su $USERNAME -c "DISPLAY=:0.0 disper -l ; sleep 1; DISPLAY=:0.0 disper -S ; sleep 4; DISPLAY=:0.0 disper -S" 
fi

也许也可以不使用 disper -l 并调用 disper 两次,但我还没有检查

相关内容