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

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

Как я могу автоматически возобновить синергию, используя скрипт, когда меняю экраны? Я знаю, как написать сценарий, но не знаю, откуда его запустить или есть ли такое место. Обратите внимание, что я имею в виду физические экраны, а не экраны синергии.

1
задан 28 March 2015 в 22:19

1 ответ

Принятие изменения в разрешении и заставляет ошибку и триггер выполнять Ваш сценарий, periodicalloy проверка разрешения и выполнять Ваш сценарий, если это изменяется, должен сделать задание:

#!/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

Добавляют к Приложениям Запуска: Тире> Приложения Запуска> Добавляют, добавляют команду.

<час>

Редактирование

Только, чтобы быть завершенным:

, Если по некоторым причинам, Вы предпочли бы версию удара сценария:

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

2
ответ дан 28 March 2015 в 22:19

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

Похожие вопросы: