在几个场合运行特定的脚本/设置(连接鼠标,连接屏幕等)

我确信在这种情况下我不是唯一一个:我在笔记本电脑上运行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() 

如何使用

  1. 将脚本复制到空文件中,将其另存为showscripts.py
  2. 复制下面的图标(右键单击 – >保存),将其保存为(完全) icon.png 并保存在与脚本相同的目录中

    在此处输入图像描述

  3. 对于每个设置命令,请创建一个小脚本:

     /bin/bash command_to_run 

    为它们命名(无空格),但请确保使用.sh扩展名。 将脚本复制或移动到与保留指示器脚本相同的文件夹中。

    现在您可以根据需要制作任意数量的菜单项(脚本),

  4. 测试 – 通过命令运行指标:

     python3 /path/to/showscripts.py 
  5. 如果一切正常,请添加到启动应用程序:Dash>启动应用程序>添加。 添加命令:

     /bin/bash -c "sleep 10 && python3 /path/to/showscripts.py" 

说明

  1. 启动脚本后,它会列出其自己目录中的所有文件,查找扩展名为.sh文件。 这些文件可自动执行。
  2. 对于这些文件中的每一个,指示器都会创建一个菜单项以菜单中运行它。

其他选择?

  1. 最先进的:为特定事件编写动作的udev规则 。 然而,这也是最复杂的选择。 如果您想要或需要更改任何内容,也不是最灵活的选项。
  2. 运行后台脚本以检查已连接硬件的更改。 就屏幕设置而言 , 这个答案就是一个随时可用的例子。
  3. 将命令合并到一个脚本中,然后通过键盘快捷键运行它。 添加短路键:选择:系统设置>“键盘”>“快捷方式”>“自定义快捷方式”。 单击“+”并添加命令以运行脚本。

不过我会去指标菜单。 设置完成后,您只需移动小脚本即可轻松添加,删除或编辑function。