在某些场合运行特定脚本/设置(连接鼠标、连接屏幕等)

在某些场合运行特定脚本/设置(连接鼠标、连接屏幕等)

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

如何使用

  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. 将命令组合成一个脚本,并通过键盘快捷键运行它。添加快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加运行脚本的命令。

不过我会选择指示器菜单。设置完成后,只需移动小脚本即可轻松添加、删除或编辑功能。

相关内容