Как я могу выполнить скрипт при смене экрана?
Контекст: у меня есть один большой монитор, рабочий стол и ноутбук. Я использую большой монитор и переключатель HDMI, когда я дома. Это дает синергию проблему в том, что он не распознает части экрана, если экран меняется. Вы должны перезапустить клиент синергии на ноутбуке, если это так, чтобы иметь возможность доступа ко всему экрану.
Как я могу автоматически перезапустить синергию, используя скрипт, когда меняю экраны? Я знаю, как написать сценарий, но не знаю, откуда его запустить или есть ли такое место. Обратите внимание, что я имею в виду физические экраны, а не синергетические экраны.
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
- В разделе заголовка задайте путь к вашему скрипту для перезапуска
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
или путь к вашему сценарию.