GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu 16.04:Wie fügt man angeheftete Apps über das Terminal zu Unity Launcher hinzu/entfernt sie?

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:

  1. Allgemeine Theorie des Launcher-Betriebs
  2. Mögliche Methoden zum Entfernen und Anhängen an Unity Launcher
  3. 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.

Verwandte:Treiber für Intel HD installiert, aber Spiele beschweren sich immer noch, dass 3D nicht unterstützt wird?

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:

  1. Erstellen Sie ein Verzeichnis ~/bin .
  2. Speichern Sie den Quellcode von unten in die Datei ~/bin/launcherctl.py
  3. Wenn Sie bash sind Benutzer, können Sie ~/.profile als Quelle verwenden , oder abmelden und anmelden. Der ~/bin Verzeichnis wird zu Ihrem $PATH hinzugefügt automatisch variabel. Für diejenigen, die bash nicht verwenden , fügen Sie ~/bin hinzu zu Ihrem $PATH Variable 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:

  1. git clone https://github.com/SergKolo/sergrep.git ~/bin/sergrep
  2. echo "PATH=$PATH:$HOME/bin/sergrep" >> ~/.bashrc
  3. source ~/.bashrc . Nach diesem Schritt können Sie launcherctl.py aufrufen wie jeder andere Befehl. Das Abrufen von Updates ist so einfach wie cd ~/bin/sergrep;git pull

Abrufen von Code von GitHub ohne git :

  1. cd /tmp
  2. wget https://github.com/SergKolo/sergrep/archive/master.zip
  3. unzip master.zip
  4. Wenn Sie ~/bin nicht haben , machen Sie es mit mkdir ~/bin
  5. 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
Verwandte:Kein Ton in Ubuntu 13.04, nur Dumthe-Ausgabegerät aufgelistet?
Ubuntu
  1. So entfernen Sie den Amazon Dash Launcher unter Ubuntu 20.04 Focal Fossa Linux

  2. So öffnen Sie das Terminal in Ubuntu 22.04

  3. So fügen Sie eine Auslagerungsdatei unter Ubuntu hinzu

  4. So fügen Sie einen Drucker in Ubuntu 11.10 hinzu | Drucker in Ubuntu hinzufügen

  5. So installieren Sie den Alacritty Terminal Emulator über PPA in Ubuntu 20.04

Wie man Lesezeichen in Ubuntu hinzufügt und entfernt [Anfängertipp]

So fügen Sie eine Startanwendung in Ubuntu hinzu oder entfernen sie

Ubuntu So legen Sie eine statische IP über Terminal und GUI fest

So installieren Sie Teamviewer auf Ubuntu 20.04 über das Terminal

Wie entferne ich Google Chrome-Apps (z. B. Postman) unter Ubuntu 18.04 vollständig?

Wie füge ich Apps nach der Erstellung auf Liveusb hinzu und entferne sie?