Как я могу выполнить скрипт при смене экрана?

Контекст: у меня есть один большой монитор, рабочий стол и ноутбук. Я использую большой монитор и переключатель 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

Он проверяет текущее разрешение каждые пять секунд и запускает скрипт, как установлено в разделе заголовка, если есть изменение разрешения.

Как пользоваться

  1. Скопируйте скрипт в пустой файл, сохраните его как check_resolution.py
  2. В разделе заголовка задайте путь к вашему скрипту для перезапуска synergy
  3. Протестируйте его, запустив в окне терминала с помощью команды:

    python3 /path/to/check_resolution.py
    
  4. если все работает нормально, добавьте его в свои приложения запуска.

Заметка

Команда в качестве запускаемого приложения, вероятно, нуждается в небольшом перерыве, чтобы убедиться, что рабочий стол полностью загружен при запуске сценария. Команда для добавления в автозагрузку приложений будет:

/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 или путь к вашему сценарию.

Другие вопросы по тегам