用于执行固定到 Unity 栏的应用程序的终端命令

用于执行固定到 Unity 栏的应用程序的终端命令

我希望自定义固定到 Unity 启动器的应用程序的键盘快捷键(在 Ubuntu 16.04 中)。执行第二个固定应用程序的命令行是什么?第三个(等等)?

任何提示都将非常感激。


编辑1

正如@CelticWarrior 所指出的,Super + 1-9 应该可以解决问题。出于某种原因,当我升级到 16.04 时,这些绑定停止工作(在 14.04 中工作正常)。这就是为什么我希望适当地重新自定义快捷方式。


编辑2

Compiz Config 设置管理器允许我分配 Super + Alt 来查看 Dash。添加 1-9 现在可以启动固定的应用程序。(但是,不允许我简单地分配 Super 来查看 Dash... 重置为默认值只会取消分配该键。)

答案1

解决核心问题

到目前为止,导致您出现Super+number键问题的原因仍然未知,但我坚信您需要检查SuperCompiz 配置设置管理器中的 Unity 插件下是否启用了该键。(可通过sudo apt-get install compizconfig-settings-manager命令获得)。

命令行方法可以通过以下命令:

dconf reset /org/compiz/profiles/unity/plugins/unityshell/show-launcher

解决标题问题

但是,要回答您提出的标题问题,即是否有一个命令行工具可以从 Unity 启动器打开程序...嗯,到目前为止还没有这样的工具。下面给出的脚本正是执行该功能。

用法

按照-h选项给出:

$ ./open_launcher_item.py -h                                                                                             
usage: open_launcher_item.py [-h] -i ITEM

optional arguments:
  -h, --help            show this help message and exit
  -i ITEM, --item ITEM  position of app on the launcher

因此,如果你想在启动器上启动第一个应用程序,请这样做

./open_launcher_item.py -i 0

如果你想要第二件商品,

./open_launcher_item.py -i 1

要使脚本正常工作,请将其存储在文件夹中。如果您的文件夹中~/bin没有文件夹,请创建一个。确保脚本可以通过命令执行,或者在图形文件管理器中右键单击文件,然后在权限选项卡下选中“允许作为程序执行”。bin/home/USERchmod +x ~/bin/open_launcher_item.py

要使其适用于键盘快捷键,您必须创建 9 个快捷键,并为每个快捷键设置适当的命令,使用-i 0-i 1等,直到-i 9。请注意,您需要使用完整路径到脚本,即/home/USER/bin/open_launcher_item.py -i 1

脚本源

也可在GitHub

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Author: Serg Kolo , contact: [email protected]
# Date: January 15th, 2017
# Purpose: opens applications on Unity launcher according to position
# Tested on: Ubuntu 16.04 LTS
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gio,Gtk
import sys,argparse

class ApplicationOpener(Gtk.Application):

    def __init__(self):
        Gtk.Application.__init__(self,flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE)
        self.args = None 
        self.schema = 'com.canonical.Unity.Launcher'
        self.key = 'favorites'

    def gsettings_get(self, schema, path, key):
        """Get value of gsettings schema"""
        if path is None:
            gsettings = Gio.Settings.new(schema)
        else:
            gsettings = Gio.Settings.new_with_path(schema, path)
        return gsettings.get_value(key)

    def get_launchers(self):
        return [ i.replace('application://',"")  
                 for i in self.gsettings_get(self.schema,None,self.key)
                     if i.startswith('application://')
        ]

    def do_activate(self):
        position = self.args.item
        launchers = self.get_launchers()

        if position > len(launchers):
            position = -1

        try:
            Gio.DesktopAppInfo.new(launchers[position]).launch_uris(None)
        except Exception as e:
            subprocess.call(['zenity','--error','OOPS! SOMETHING WENT WRONG:\n' + str(e)])
        return 0

    def do_command_line(self, args):
        parser = argparse.ArgumentParser()
        parser.add_argument('-i', '--item',
                            type=int,required=True,
                            help='position of app on the launcher')
        self.args = parser.parse_args(args.get_arguments()[1:])
        self.do_activate()
        return 0

def main():

    app = ApplicationOpener()
    exit_status = app.run(sys.argv)
    sys.exit(exit_status)

if __name__ == '__main__':
    main()

相关内容