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

Dan*_*hoa 6 bash screensaver

我正在使用 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 中查找配置文件数据])。

gei*_*rha 2

我在谷歌上搜索了这个自动分散的东西,并在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 并调用 分散 两次,但我还没有检查