我使用的是 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 两次,但我还没有检查