GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu 16.04:ターミナルを介して固定されたアプリをUnity Launcherに追加/削除する方法は?

自分のトピックでネットを検索しましたが、答えが見つかりませんでした。

出来ますか?はいの場合、教えていただけますか?ありがとう🙂

承認された回答:

内容:

  1. ランチャー操作の一般理論
  2. Unityランチャーを削除および追加するための可能な方法
  3. launcherctl.pyユーティリティ

1。ランチャー操作の一般理論

Unityランチャーは、基本的に.desktopのリストです。 ファイル。これらは基本的に、アプリケーションの起動とカスタムアクションの実行を可能にするショートカットです。通常、これらは/usr/share/applicationsに保存されます。 、ただし、~/.local/share/applicationsにもあります。 、およびシステム上の他の場所。一般的なケースでは、そのようなファイルを/usr/share/applicationsに保存することをお勧めします すべてのユーザーまたは~/.local/share/applications 個々のユーザーごとに。

Dconf 設定のデータベースを使用すると、Unityランチャー用のそのようなアプリのリストを保存でき、gsettingsで表示および変更できます。 効用。例:

$ gsettings get  com.canonical.Unity.Launcher favorites
['application://wps-office-et.desktop', 'application://wps-office-wpp.desktop', 'application://wps-office-wps.desktop', 'unity://running-apps', 'unity://devices']
$ gsettings set  com.canonical.Unity.Launcher favorites  "['wechat.desktop']"                                                         
$ gsettings get  com.canonical.Unity.Launcher favorites                                                                               
['application://wechat.desktop', 'unity://running-apps', 'unity://devices']

ご覧のとおり、すべての.desktop ファイルにはapplication://があります それらにプレフィックスを付けますが、ランチャーリストを設定する場合は必須ではありません。 unity://のアイテム プレフィックスは変更できず、削除できません。

gsettings get com.canonical.Unity.Launcher favorites およびgsettings set com.canonical.Unity.Launcher favorites コマンドを使用して、~/.bashrcに関数を作成できます 、例:

get_launcher()
{
    gsettings get  com.canonical.Unity.Launcher favorites
}

set_launcher()
{
    # call this as set_launcher "['file1.desktop','file2.desktop']"
    gsettings set  com.canonical.Unity.Launcher favorites "$1"
}

例:

$ set_launcher "['firefox.desktop','gnome-terminal.desktop']"                                                                         
$ get_launcher                                                                                                                        
['application://firefox.desktop', 'application://gnome-terminal.desktop', 'unity://running-apps', 'unity://devices']

2。 UnityLauncherを削除および追加するための可能な方法

最も単純な例はすでに示されています– gsettingsを介して 効用。特定のアイテムを削除して追加するには、gsettingsを解析する必要があります 出力。これは、sedを介して実行できます またはawk ユーティリティ、そしてbashでも努力して 。ただし、Pythonを使用すると、より簡単なアプローチと「抵抗が最小のパス」が可能になることがわかりました。したがって、ここで提供される例では、gsettingsを使用しています。 Pythonと共同で。

削除の場合は次のとおりです:

$ gsettings get com.canonical.Unity.Launcher favorites|                                                                               
> python -c 'import ast,sys; x =[]; x = [i for l in sys.stdin for i in ast.literal_eval(l)]; 
> x.pop(x.index("application://"+sys.argv[1])); print x' firefox.desktop
['application://gnome-terminal.desktop', 'unity://running-apps', 'unity://devices']

ここで何が起きてるの ? gsettings getの出力を渡します Pythonへのパイプ経由。次に、Pythonは標準の入力ストリームを読み取り、astを使用します ライブラリはリストのテキスト表現を評価し、Pythonが認識できる実際のリストに変換します。これにより、作業が大幅に簡素化されます。これがawkまたはsedの場合、個々の文字の削除と追加を処理する必要があります。最後に、2番目のコマンドライン引数(sys.argv[1]で示される)を削除(ポップ)します。 )リストでそのインデックスを見つけることによって。これで新しいリストができました。このリストは、パイプを介してgsettings setに渡すことができます。

完全なコマンドは次のとおりです。

$ gsettings get com.canonical.Unity.Launcher favorites|
> python -c 'import ast,sys; x =[]; x = [i for l in sys.stdin for i in ast.literal_eval(l)]; 
> x.pop(x.index("application://"+sys.argv[1])); print "\""+repr(x)+"\""' firefox.desktop |
> xargs -I {} gsettings set  com.canonical.Unity.Launcher favorites {}

これは~/.bashrcにうまく入れることができます そのように機能します:

remove_launcher_item()
{
  gsettings get com.canonical.Unity.Launcher favorites|
  python -c 'import ast,sys; x =[]; x = [i for l in sys.stdin for i in ast.literal_eval(l)];\
  x.pop(x.index("application://"+sys.argv[1])); print "\""+repr(x)+"\""' "$1" |
  xargs -I {} gsettings set  com.canonical.Unity.Launcher favorites {}
}

ここで注意すべき点は、引用符で囲まれたリストの「文字列」表現を再度出力し、xargsを介して渡す必要があることです。 。 popの代わりに追加するという考え方は似ていますが、 appendを使用します 機能:

append_launcher_item()
{
  gsettings get com.canonical.Unity.Launcher favorites|
  python -c 'import ast,sys; x =[]; x = [i for l in sys.stdin for i in ast.literal_eval(l)];\
  x.append("application://"+sys.argv[1]); print "\""+repr(x)+"\""' "$1" |
  xargs -I {} gsettings set  com.canonical.Unity.Launcher favorites {}

}

サンプル実行:

$ get_launcher                                                                                                                        
['unity://running-apps', 'unity://devices', 'application://firefox.desktop']
$ append_launcher_item gnome-terminal.desktop                                                                                         
$ get_launcher                                                                                                                        
['unity://running-apps', 'unity://devices', 'application://firefox.desktop', 'application://gnome-terminal.desktop']
$ 

これらの関数は、必ずしも~/.bashrcの一部である必要はありません。 。それらをスクリプトに配置することもできます

3。 launcherctl.pyユーティリティ

時間をかけて、gsettingsと同じように効果的に実行できる一連の関数をPythonで調査し、構築してきました。 効用。 Pythonの力とこれらの関数を組み合わせて、launcherctl.pyを作成しました。 ユーティリティ。

関連:Intel HD用のドライバーがインストールされていますが、それでもゲームは3Dがサポートされていないと文句を言いますか?

これは進行中の作業であり、将来的にはより多くの機能を含むように拡張される予定です。この特定の質問については、最初のバージョンに表示されているソースコードを残しておきます。さらなるバージョンと改善点はGitHubにあります。

bash関数と比較したこのスクリプトの利点は何ですか?
1.これは特定の目的を持つ「集中型」ユーティリティです。アクションごとに個別のスクリプト/関数を用意する必要はありません。
2.使いやすく、最小限のコマンドラインオプション
3.他のユーティリティと組み合わせて使用​​すると、より読みやすいコードが提供されます。 。

使用法

-hで示されているように コマンドラインオプション:

$ ./launcherctl.py -h                                                                                                                 
usage: launcherctl.py [-h] [-f FILE] [-a] [-r] [-l] [-c]

Copyright 2016. Sergiy Kolodyazhnyy.
    This command line utility allows appending and removing items
    from Unity launcher, as well as listing and clearing the
    Launcher items.

    --file option is required for --append and --remove 


optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE
  -a, --append
  -r, --remove
  -l, --list
  -c, --clear

コマンドラインの使用法は簡単です。

追加:

$ ./launcherctl.py -a -f wechat.desktop

削除:

$ ./launcherctl.py -r -f wechat.desktop

ランチャーを完全にクリアする:

$ ./launcherctl.py -c 

ランチャーにアイテムを一覧表示する:

$ ./launcherctl.py -l                                                                                                                 
chromium-browser.desktop
firefox.desktop
opera.desktop
vivaldi-beta.desktop

前述のように、他のコマンドで使用できます。たとえば、ファイルから追加する:

$ cat new_list.txt                                                                                                                    
firefox.desktop
wechat.desktop
gnome-terminal.desktop    
$ cat new_list.txt | xargs -L 1 launcherctl.py -a -f

テキストファイルから指定されたアイテムの削除にも同じことが使用できます

dashから3番目のアイテムを削除する ボタン:

$ launcherctl.py  -l | awk 'NR==3' | xargs -L 1 launcherctl.py -r -f  

ソースコードの入手とインストール

手動による方法:

  1. ディレクトリを作成する~/bin
  2. ソースコードを下からファイル~/bin/launcherctl.pyに保存します
  3. bashの場合 ユーザー、~/.profileをソースできます 、またはログアウトしてログインします。 ~/bin ディレクトリが$PATHに追加されます 自動的に可変。 bashを使用しない場合 、~/binを追加します $PATHに 次のように、シェル構成ファイル内の変数:PATH="$PATH:$HOME/bin

コードへの最新の変更について述べたように、GitHubリポジトリに移動します。 gitがある場合 インストールすると、手順が簡単になります:

  1. git clone https://github.com/SergKolo/sergrep.git ~/bin/sergrep
  2. echo "PATH=$PATH:$HOME/bin/sergrep" >> ~/.bashrc
  3. source ~/.bashrc 。この手順の後、launcherctl.pyを呼び出すことができます 他のコマンドと同じように。更新の取得は、cd ~/bin/sergrep;git pullと同じくらい簡単です。

gitを使用せずにGitHubからコードを取得する :

  1. cd /tmp
  2. wget https://github.com/SergKolo/sergrep/archive/master.zip
  3. unzip master.zip
  4. ~/binがない場合 、mkdir ~/binで作成します
  5. mv sergrep-master/launcherctl.py ~/bin/launcherctl.py

すべての場合において、同じルールが適用されます。スクリプトは、PATHに追加されたディレクトリに存在する必要があります。 変数であり、chmod +x launcherctl.pyで実行可能権限を設定する必要があります

元のソースコード

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

#
# Author: Serg Kolo , contact: [email protected]
# Date: Sept 24, 2016
# Purpose: command-line utility for controling the launcher
#          settings
# Tested on: Ubuntu 16.04 LTS
#
#
# Licensed under The MIT License (MIT).
# See included LICENSE file or the notice below.
#
# Copyright © 2016 Sergiy Kolodyazhnyy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

import gi
from gi.repository import Gio
import argparse
import sys

def gsettings_get(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 gsettings_set(schema, path, key, value):
    """Set value of gsettings schema"""
    if path is None:
        gsettings = Gio.Settings.new(schema)
    else:
        gsettings = Gio.Settings.new_with_path(schema, path)
    if isinstance(value,list ):
        return gsettings.set_strv(key, value)
    if isinstance(value,int):
        return gsettings.set_int(key, value)

def puts_error(string):
    sys.stderr.write(string+"\n")
    sys.exit(1)

def list_items():
    """ lists all applications pinned to launcher """
    schema = 'com.canonical.Unity.Launcher'
    path = None
    key = 'favorites'
    items = list(gsettings_get(schema,path,key))
    for item in items:
        if 'application://' in item:
            print(item.replace("application://","").lstrip())

def append_item(item):
    """ appends specific item to launcher """
    schema = 'com.canonical.Unity.Launcher'
    path = None
    key = 'favorites'
    items = list(gsettings_get(schema,path,key))

    if not item.endswith(".desktop"):
        puts_error( ">>> Bad file.Must have .desktop extension!!!")

    items.append('application://' + item)
    gsettings_set(schema,path,key,items)

def remove_item(item):
    """ removes specific item from launcher """
    schema = 'com.canonical.Unity.Launcher'
    path = None
    key = 'favorites'
    items = list(gsettings_get(schema,path,key))

    if not item.endswith(".desktop"):
       puts_error(">>> Bad file. Must have .desktop extension!!!")
    items.pop(items.index('application://'+item))
    gsettings_set(schema,path,key,items)

def clear_all():
    """ clears the launcher completely """
    schema = 'com.canonical.Unity.Launcher'
    path = None
    key = 'favorites'

    gsettings_set(schema,path,key,[])

def parse_args():
    """parse command line arguments"""

    info="""Copyright 2016. Sergiy Kolodyazhnyy.
    This command line utility allows appending and removing items
    from Unity launcher, as well as listing and clearing the
    Launcher items.

    --file option is required for --append and --remove 
    """
    arg_parser = argparse.ArgumentParser(
                 description=info,
                 formatter_class=argparse.RawTextHelpFormatter)
    arg_parser.add_argument('-f','--file',action='store',
                            type=str,required=False)
    arg_parser.add_argument('-a','--append',
                            action='store_true',required=False)

    arg_parser.add_argument('-r','--remove',
                            action='store_true',required=False)
    arg_parser.add_argument('-l','--list',
                            action='store_true',required=False)

    arg_parser.add_argument('-c','--clear',
                            action='store_true',required=False)
    return arg_parser.parse_args()

def main():
    """ Defines program entry point """
    args = parse_args()

    if args.list:
       list_items()
       sys.exit(0)

    if args.append:
       if not args.file:
          puts_error(">>>Specify .desktop file with --file option")

       append_item(args.file)
       sys.exit(0)

    if args.remove:
       if not args.file:
          puts_error(">>>Specify .desktop file with --file option")

       remove_item(args.file)
       sys.exit(0)

    if args.clear:
       clear_all()
       sys.exit(0)

    sys.exit(0)

if __name__ == '__main__':
    main()

追記:

  • 過去に、ファイルからランチャーリストを設定できる回答を作成しました:https://askubuntu.com/a/761021/295286
  • 複数のリストを切り替えるためのUnityインジケーターも作成しました。こちらの手順をご覧ください:http://www.omgubuntu.co.uk/2016/09/launcher-list-indicator-update-ppa-workspaces
関連:Ubuntu 13.04で音が出ない、Dumthe出力デバイスのみがリストされていますか?
Ubuntu
  1. Ubuntuでスワップファイルを追加する方法

  2. Ubuntu11.10でプリンターを追加する方法| Ubuntuにプリンターを追加する

  3. Ubuntu20.04でPPAを介してAlacrittyターミナルエミュレータをインストールする方法

  1. Ubuntu 20.04 FocalFossaLinuxでAmazonダッシュランチャーを削除する方法

  2. Ubuntu22.04でターミナルを開く方法

  3. Ubuntu17.10からUnityデスクトップを削除する方法

  1. Ubuntu20.04でユーザーを追加および削除する方法

  2. launcher-list-indicatorを使用してUbuntuでUnityランチャーの複数のプロファイルを作成する方法

  3. Ubuntuで孤立したパッケージを削除する方法