背景:我有一台大显示器、一台台式机和一台笔记本电脑。我在家时使用大显示器和 HDMI 开关。这给 synergy 带来了一个问题,即如果屏幕发生变化,它无法识别屏幕的某些部分。如果是这种情况,您必须在笔记本电脑上重新启动 synergy 客户端才能访问整个屏幕。
每次我更换屏幕时,如何使用脚本自动重新启动 synergy?我知道如何编写脚本,但我不知道从哪里启动它,或者是否有这样的地方。请注意,我指的是物理屏幕,而不是 synergy 屏幕。
答案1
假设分辨率的变化既导致了错误,又触发了脚本的运行,则定期检查分辨率并在发生变化时运行脚本应该可以完成这项工作:
#!/usr/bin/env python3
import subprocess
import time
command = "</path/to/script_to_run>"
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
res1 = get_res()
while True:
time.sleep(5)
res2 = get_res()
if res2 != res1:
subprocess.Popen(["/bin/bash", "-c", command])
res1 = res2
它每五秒检查一次当前分辨率,如果分辨率发生变化,则运行头部部分设置的脚本。
如何使用
将脚本复制到一个空文件中,另存为
check_resolution.py
在 head 部分,设置要重新启动的脚本的路径
synergy
在终端窗口中使用以下命令运行它进行测试运行:
python3 /path/to/check_resolution.py
如果一切正常,请将其添加到您的启动应用程序中。
笔记
作为启动应用程序的命令可能需要稍作休息,以确保脚本启动时桌面已完全加载。然后要添加到启动应用程序的命令将是:
/bin/bash -c "sleep 15&&python3 /path/to/check_resolution.py
添加到启动应用程序:Dash > 启动应用程序 > 添加,添加命令。
编辑
为了完整起见:
如果由于某种原因,您更喜欢该脚本的 bash 版本:
#!/bin/bash
function get_res {
echo $(xrandr -q | awk -F'current' -F',' 'NR==1 {gsub("( |current)","");print $2}')
}
res1=$(get_res)
while true; do
sleep 5
res2=$(get_res)
if [ "$res1" != "$res2" ]; then
<command_to_run>
fi
res1=$res2
done
除语言扩展外,用法几乎相同:
check_resolution.sh
以及运行它的命令:
/bin/bash /path/to/check_resolution.sh
<command_to_run>
并用重新启动的命令synergy
或脚本的路径替换。