上下文:我有一台大显示器,一台台式机和一台笔记本电脑。我在家时使用大显示器和HDMI开关。这给协同作用带来了一个问题,即如果屏幕发生变化,它将无法识别屏幕的各个部分。在这种情况下,必须重新启动笔记本电脑上的synergy客户端才能访问整个屏幕。
每当我更改屏幕时,如何使用脚本自动重启协同作用?我知道如何编写脚本,但我不知道从何处启动脚本,或者是否有这样的地方。请注意,我指的是物理屏幕,而不是协同屏幕。
假设分辨率的变化同时导致错误和触发脚本运行,请定期检查分辨率并运行脚本(如果更改发生了):
#!/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
在头部部分,设置脚本路径以重新启动 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
或脚本路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句