Я уверен, что я не единственный в этой ситуации: Я запускаю Ubuntu 16 на своем ноутбуке, и я использую это для соединения с моей рабочей станцией в офисе.
Теперь существует пара вещей, которые я должен делать каждый день, когда я соединяюсь со своей рабочей станцией, такой как фиксация моей скорости мыши Bluetooth, установка правильного разрешения для обоих экранов и восстановления моих обоев с азотом. Для каждой из этих задач у меня есть (запуск) сценарий, который хорошо работает, но когда я соединяю свой второй экран, ноутбук уже загружается.
Таким образом, мой вопрос, рядом с приложениями запуска, как мог я (т.е.). выполненный nitrogen --restore
и уменьшите масштаб разрешения на моем ноутбуке (от 2560x1600 до 1440x900), когда я соединю второй экран?
Что я делаю теперь запущен все отдельные скрипты снова вручную, который не является грандиозным предприятием, но мы не используем Ubuntu, чтобы просто принять, как это, правильно?;)
Разъясниться; мой вопрос не слишком специфичен для этих задач, но больше в общем смысле; как я мог запустить что-нибудь из терминала на определенных действиях как "вход обнаруженного дисплея"?
Вместо того, чтобы создать несколько смотрят - процедуры каждого возможного события, которое могло произойти, я предложу использовать "один для всего" решения как ниже.
Сценарий индикатора автоматически добавляет Ваши сценарии к меню индикатора при размещении их в тот же каталог как индикатор. Таким образом, Ваши сценарии установки будут легко доступны от GUI.
#!/usr/bin/env python3
import subprocess
import os
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3
currpath = os.path.dirname(os.path.realpath(__file__))
class Indicator():
def __init__(self):
self.app = 'update_setting'
iconpath = currpath+"/icon.png"
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.SYSTEM_SERVICES)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
def getscripts(self):
files = [f for f in os.listdir(currpath) if f.endswith(".sh")]
for f in files:
fpath = os.path.join(currpath, f)
subprocess.Popen(["chmod", "+x", fpath])
menuitem = Gtk.MenuItem(f.split(".")[0])
menuitem.connect("activate", self.run_script, fpath)
self.menu.append(menuitem)
def create_menu(self):
self.menu = Gtk.Menu()
self.getscripts()
# quit
item_quit = Gtk.MenuItem('Quit')
sep = Gtk.SeparatorMenuItem()
self.menu.append(sep)
item_quit.connect('activate', self.stop)
self.menu.append(item_quit)
self.menu.show_all()
return self.menu
def run_script(self, widget, script):
print(script)
subprocess.Popen(["/bin/bash", "-c", script])
def stop(self, source):
Gtk.main_quit()
Indicator()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
showscripts.py
Скопируйте значок ниже (щелчок правой кнопкой-> сохраняют), сохраните его как (точно) icon.png
в одном и том же каталоге как сценарий
Для каждой из Ваших команд настроек создайте маленький сценарий:
/bin/bash
command_to_run
Назовите их (никакие пробелы), но удостоверьтесь, что использовали .sh
расширение. Скопируйте или переместите сценарии в ту же папку как, где Вы сохраняете сценарий индикатора.
Теперь можно сделать как много пунктов меню (сценарии) как Вам угодно
Тестовый прогон индикатор командой:
python3 /path/to/showscripts.py
Если все хорошо работает, добавьте к Приложениям Запуска: Тире> Приложения Запуска> Добавляет. Добавьте команду:
/bin/bash -c "sleep 10 && python3 /path/to/showscripts.py"
.sh
расширение. Эти файлы сделаны исполняемым файлом автоматически.Я однако пошел бы для меню индикатора. Однажды установка, можно легко добавить, удалить или отредактировать функциональность путем простого перемещения маленьких сценариев.