在几个场合运行特定的脚本/设置(连接鼠标,连接屏幕等)
我确信在这种情况下我不是唯一一个:我在笔记本电脑上运行Ubuntu 16,然后用它连接到我办公室的工作站。
现在每天连接我的工作站时都要做一些事情,例如修复我的蓝牙鼠标速度,为两个屏幕设置正确的分辨率以及用氮气恢复我的壁纸。 对于这些任务中的每一个,我都有一个(启动)脚本可以正常工作,但是当我连接第二个屏幕时,笔记本电脑已经启动了。
所以我的问题是,在启动应用程序旁边,当我连接第二个屏幕时,我怎么能(即)运行nitrogen --restore
并缩小我的笔记本电脑上的分辨率(从2560×1600到1440×900)?
我现在做的是再次手动运行所有单独的脚本,这不是什么大问题,但我们不使用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
-
如果一切正常,请添加到启动应用程序:Dash>启动应用程序>添加。 添加命令:
/bin/bash -c "sleep 10 && python3 /path/to/showscripts.py"
说明
- 启动脚本后,它会列出其自己目录中的所有文件,查找扩展名为
.sh
文件。 这些文件可自动执行。 - 对于这些文件中的每一个,指示器都会创建一个菜单项以从菜单中运行它。
其他选择?
- 最先进的:为特定事件编写动作的udev规则 。 然而,这也是最复杂的选择。 如果您想要或需要更改任何内容,也不是最灵活的选项。
- 运行后台脚本以检查已连接硬件的更改。 就屏幕设置而言 , 这个答案就是一个随时可用的例子。
- 将命令合并到一个脚本中,然后通过键盘快捷键运行它。 添加短路键:选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。 单击“+”并添加命令以运行脚本。
不过我会去指标菜单。 设置完成后,您只需移动小脚本即可轻松添加,删除或编辑function。