我正在使用 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
Run Code Online (Sandbox Code Playgroud)
醒来后,我在 中得到以下信息autodisper_on_wake.txt
,表明脚本确实触发了:
Assuming disper defaults...
'NoneType' object has no attribute 'endswith'
Unable to fingerprint display configuration
home
school
undocked
Run Code Online (Sandbox Code Playgroud)
但是没有发生任何变化 - 尽管在唤醒我的机器之前拔掉了我的显示器(从配置文件“学校”到配置文件“取消连接”),我仍然在配置文件“学校”中。
任何想法如何继续?(FWIW,我将 autorandr 更改为让 PROFILE 和 CONFIG 指向我的绝对主目录,而不是 ~ [我认为唤醒脚本可能以 root 身份执行,因此它会在 ~root 中查找配置文件数据])。
我在谷歌上搜索了这个自动分散的东西,并在https://github.com/wertarbyte/auto-分散 上找到了同名的东西,并查看了源代码。它似乎正在运行基于 X11 的命令,但您的 pm 脚本可能无法在 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
Run Code Online (Sandbox Code Playgroud)
小智 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
Run Code Online (Sandbox Code Playgroud)
也许也没有 分散 -l 并调用 分散 两次,但我还没有检查
归档时间: |
|
查看次数: |
1164 次 |
最近记录: |