我确信我不是唯一一个遇到这种情况的人:我在笔记本电脑上运行 Ubuntu 16,并使用它连接到办公室的工作站。
现在,当我连接到工作站时,我每天都要做几件事,例如修复蓝牙鼠标速度、为两个屏幕设置正确的分辨率以及用氮气恢复壁纸。对于每一项任务,我都有一个运行良好的(启动)脚本,但当我连接第二个屏幕时,笔记本电脑已经启动了。
所以我的问题是,除了启动应用程序之外,nitrogen --restore
当我连接第二个屏幕时,我怎样才能运行并缩小笔记本电脑的分辨率(从 2560x1600 到 1440x900)?
我现在要做的是再次手动运行所有单独的脚本,这没什么大不了的,但我们不会使用 Ubuntu 来接受它的现状,对吗?;)
澄清一下;我的问题不是针对这些任务太具体的,而是更具有普遍意义;我怎样才能在诸如“检测到显示输入”之类的特定操作上从终端启动任何东西?
答案1
使用一个微型指示器自动将脚本添加到菜单中
我建议不要为可能发生的每个事件创建多个监视程序,而是使用如下所示的“一劳永逸”解决方案。
如果您将脚本放在以下位置,指标脚本会自动将您的脚本添加到指标菜单中:同一目录作为指示器。这样,您的设置脚本将很容易从 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 规则针对特定事件采取的行动。但这也是最复杂的选项。如果您想要或需要更改任何内容,也不是最灵活的选项。
- 运行后台脚本来检查所连接硬件的变化。至于屏幕设置,现成的示例位于这个答案。
- 将命令组合成一个脚本,并通过键盘快捷键运行它。添加快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加运行脚本的命令。
不过我会选择指示器菜单。设置完成后,只需移动小脚本即可轻松添加、删除或编辑功能。