web-dev-qa-db-ja.com

ユニティバーに固定されたアプリを実行するターミナルコマンド

ユニティランチャー(Ubuntu 16.04)に固定されているアプリのキーボードショートカットをカスタマイズしたいと思います。 2番目の固定アプリを実行する(たとえば)コマンドラインは何ですか? 3番目(など)?

どんなヒントでも大歓迎です。


編集1

@CelticWarriorが指摘したように、Super + 1-9がトリックを行うはずです。何らかの理由で、これらのバインディングは、16.04にアップグレードしたときに機能しなくなりました(14.04で正常に機能しました)。そのため、ショートカットを適切に再カスタマイズしたいと考えました。


編集2

Compiz Config Settings Managerでは、Super + Altを割り当ててダッシュを表示できます。 1〜9を追加すると、ピン留めされたアプリが起動します。 (ただし、ダッシュを表示するために単にSuperを割り当てることはできません...デフォルトにリセットすると、単にキーの割り当てが解除されます。)

2
emagar

コアの問題に対処する

これまでの問題の原因 Super+number キーは不明のままですが、私はあなたが確認する必要があると強く信じています Super キーは、Compiz Config Settings Managerの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

2番目のアイテムが必要な場合は、

./open_launcher_item.py -i 1

スクリプトを機能させるには、~/binフォルダーに保存します。 /home/USERフォルダーにbinフォルダーがない場合は、作成します。 chmod +x ~/bin/open_launcher_item.pyコマンドを使用するか、グラフィカルファイルマネージャーでファイルを右クリックし、[アクセス許可]タブの[プログラムとして実行を許可する]をオンにして、スクリプトが実行可能であることを確認します。

キーボードショートカットで機能させるには、9個のショートカットを作成し、それぞれに適切なcommandを-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 __== '__main__':
    main()
1