Also habe ich das Netz zu meinem Thema durchsucht, aber keine Antwort gefunden.
Ist es möglich? Wenn ja, kannst du es mir bitte sagen? Danke 🙂
Akzeptierte Antwort:
Inhalt:
- Allgemeine Theorie des Launcher-Betriebs
 - Mögliche Methoden zum Entfernen und Anhängen an Unity Launcher
 - launcherctl.py-Dienstprogramm
 
1. Allgemeine Theorie des Launcher-Betriebs
 Der Unity Launcher ist im Wesentlichen eine Liste von .desktop Dateien. Sie sind im Wesentlichen Verknüpfungen, die das Starten von Anwendungen sowie das Ausführen benutzerdefinierter Aktionen ermöglichen. Normalerweise werden sie in /usr/share/applications gespeichert , kann sich aber auch in ~/.local/share/applications befinden , und überall sonst auf dem System. Für den allgemeinen Fall empfehle ich, solche Dateien in /usr/share/applications zu speichern für alle Benutzer oder ~/.local/share/applications für jeden einzelnen Benutzer.
 Die Dconf Die Einstellungsdatenbank ermöglicht das Speichern einer Liste solcher Apps für den Unity Launcher und kann mit gsettings angezeigt und geändert werden Nützlichkeit. Zum Beispiel:
$ 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']
 
 Wie Sie alle .desktop sehen können Dateien haben application:// Präfix auf ihnen, es ist jedoch nicht erforderlich, wenn die Launcher-Liste festgelegt wird. Die Elemente mit unity:// Präfix sind nicht änderbar und können nicht entfernt werden.
 Die gsettings get com.canonical.Unity.Launcher favorites und gsettings set com.canonical.Unity.Launcher favorites Befehle können verwendet werden, um Funktionen in Ihrem ~/.bashrc zu erstellen , zum Beispiel:
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"
}
 Beispiel:
$ set_launcher "['firefox.desktop','gnome-terminal.desktop']"                                                                         
$ get_launcher                                                                                                                        
['application://firefox.desktop', 'application://gnome-terminal.desktop', 'unity://running-apps', 'unity://devices']
 2. Mögliche Methoden zum Entfernen und Anhängen an Unity Launcher
 Das einfachste Beispiel wurde bereits gezeigt – über gsettings Nützlichkeit. Das Entfernen und Anhängen bestimmter Elemente erfordert das Analysieren der gsettings Ausgang. Dies kann über sed erfolgen oder awk Utilities und mit Mühe sogar in bash . Ich finde jedoch, dass Python den einfacheren Ansatz und den „Weg des geringsten Widerstands“ ermöglicht. Daher verwenden die hier bereitgestellten Beispiele gsettings gemeinsam mit python.
Hier ist ein Fall von Entfernung:
$ 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']
 
 Was passiert hier ? Wir übergeben die Ausgabe von gsettings get über Pipe zu Python. Python liest dann den Standardeingabestrom und verwendet ast Die Bibliothek wertet die Textdarstellung der Liste aus und konvertiert sie in eine tatsächliche Liste, die Python erkennen kann. Das vereinfacht die Arbeit enorm – wäre das awk oder sed, müssten wir uns mit dem Entfernen und Anhängen einzelner Zeichen befassen. Schließlich entfernen wir ( pop ) das zweite Befehlszeilenargument ( angegeben durch sys.argv[1] ), indem Sie seinen Index in der Liste finden. Wir haben jetzt eine neue Liste, die per Pipe an gsettings set weitergereicht werden kann 
Der vollständige Befehl lautet dann:
$ 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 {}
 
 Was sich gut in eine ~/.bashrc einfügen lässt funktionieren so:
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 {}
}
 
 Ein paar Dinge, die hier zu beachten sind, sind, dass wir die in Anführungszeichen eingeschlossene „String“-Darstellung der Liste erneut drucken und über xargs übergeben müssen . Die Idee mit dem Anhängen ist ähnlich, außer anstelle von pop wir verwenden append Funktion:
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 {}
}
 Beispiellauf:
$ 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']
$ 
 
 Diese Funktionen müssen nicht unbedingt Teil von ~/.bashrc sein . Sie können sie auch in ein Skript einfügen
3. launcherctl.py-Dienstprogramm
 Im Laufe der Zeit habe ich eine Reihe von Funktionen in Python recherchiert und erstellt, die effektiv dasselbe tun können wie gsettings Nützlichkeit. Ich habe die Leistungsfähigkeit von Python mit diesen Funktionen kombiniert und launcherctl.py erstellt Dienstprogramm.
Dies ist noch in Arbeit und wird in Zukunft um weitere Funktionen erweitert. Für diese spezielle Frage werde ich den Quellcode so belassen, wie er in der ersten Version erscheint. Weitere Versionen und Verbesserungen finden Sie auf GitHub.
 Was sind die Vorteile dieses Skripts im Vergleich zu Bash-Funktionen?
 1. Dies ist ein „zentralisiertes“ Dienstprogramm mit einem bestimmten Zweck. Sie müssen nicht für jede Aktion ein separates Skript/eine separate Funktion haben.
 2. Einfach zu verwendende, minimalistische Befehlszeilenoptionen
 3. Bei Verwendung in Verbindung mit anderen Dienstprogrammen sorgt dies für besser lesbaren Code .
Verwendung :
 Wie durch das -h gezeigt Befehlszeilenoption:
$ ./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
 Die Verwendung der Befehlszeile ist einfach.
Anhängen:
$ ./launcherctl.py -a -f wechat.desktop
 Entfernung:
$ ./launcherctl.py -r -f wechat.desktop
 Launcher vollständig löschen:
$ ./launcherctl.py -c 
 Elemente im Launcher auflisten:
$ ./launcherctl.py -l                                                                                                                 
chromium-browser.desktop
firefox.desktop
opera.desktop
vivaldi-beta.desktop
 Wie bereits erwähnt, kann es mit anderen Befehlen verwendet werden. Zum Beispiel Hinzufügen aus Datei:
$ cat new_list.txt                                                                                                                    
firefox.desktop
wechat.desktop
gnome-terminal.desktop    
$ cat new_list.txt | xargs -L 1 launcherctl.py -a -f
 Dasselbe kann beim Entfernen von Elementen aus einer Textdatei verwendet werden
 Entfernen eines dritten Elements aus dem dash Schaltfläche:
$ launcherctl.py  -l | awk 'NR==3' | xargs -L 1 launcherctl.py -r -f  
 Quellcode erhalten und installieren
Manueller Weg:
- Erstellen Sie ein Verzeichnis 
~/bin. - Speichern Sie den Quellcode von unten in die Datei 
~/bin/launcherctl.py - Wenn Sie 
bashsind Benutzer, können Sie~/.profileals Quelle verwenden , oder abmelden und anmelden. Der~/binVerzeichnis wird zu Ihrem$PATHhinzugefügt automatisch variabel. Für diejenigen, diebashnicht verwenden , fügen Sie~/binhinzu zu Ihrem$PATHVariable in Ihrer Shell-Konfigurationsdatei, etwa so:PATH="$PATH:$HOME/bin 
 Wie ich bereits erwähnt habe, gehen die neuesten Änderungen am Code in das GitHub-Repository. Wenn Sie git haben installiert, sind die Schritte einfacher:
git clone https://github.com/SergKolo/sergrep.git ~/bin/sergrepecho "PATH=$PATH:$HOME/bin/sergrep" >> ~/.bashrcsource ~/.bashrc. Nach diesem Schritt können Sielauncherctl.pyaufrufen wie jeder andere Befehl. Das Abrufen von Updates ist so einfach wiecd ~/bin/sergrep;git pull
 Abrufen von Code von GitHub ohne git :
cd /tmpwget https://github.com/SergKolo/sergrep/archive/master.zipunzip master.zip- Wenn Sie 
~/binnicht haben , machen Sie es mitmkdir ~/bin mv sergrep-master/launcherctl.py ~/bin/launcherctl.py
 In allen Fällen gelten dieselben Regeln – das Skript muss sich in einem Verzeichnis befinden, das zu PATH hinzugefügt wird Variable und muss über ausführbare Berechtigungen verfügen, die mit chmod +x launcherctl.py festgelegt wurden 
Ursprünglicher Quellcode :
#!/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()
 Zusätzliche Hinweise:
- In der Vergangenheit habe ich eine Antwort erstellt, die es ermöglicht, die Launcher-Liste aus der Datei festzulegen:https://askubuntu.com/a/761021/295286
 - Ich habe auch einen Unity-Indikator zum Umschalten zwischen mehreren Listen erstellt. Siehe Anweisungen hier:http://www.omgubuntu.co.uk/2016/09/launcher-list-indicator-update-ppa-workspaces