GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Ubuntu 16.04 :Comment ajouter/supprimer des applications épinglées à Unity Launcher via Terminal ?

j'ai donc cherché sur le net mon sujet mais je n'ai pas trouvé de réponse.

C'est possible? Si oui, pouvez-vous me dire s'il vous plaît? Merci 🙂

Réponse acceptée :

Contenu :

  1. Théorie générale du fonctionnement du lanceur
  2. Méthodes possibles de suppression et d'ajout au lanceur Unity
  3. utilitaire launcherctl.py

1. Théorie générale du fonctionnement du lanceur

Le lanceur Unity est essentiellement une liste de .desktop des dossiers. Ce sont essentiellement des raccourcis qui permettent de lancer des applications ainsi que d'effectuer des actions personnalisées. Généralement, ils sont stockés dans /usr/share/applications , mais peut également être situé dans ~/.local/share/applications , et n'importe où ailleurs sur le système. Pour le cas général, je recommande de stocker ces fichiers dans /usr/share/applications pour tous les utilisateurs ou ~/.local/share/applications pour chaque utilisateur individuel.

Le Dconf la base de données des paramètres permet de stocker la liste de ces applications pour le lanceur Unity et peut être visualisée et modifiée avec gsettings utilitaire. Par exemple :

$ 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']

Comme vous pouvez le voir tous les .desktop les fichiers ont application:// préfixe sur eux, mais il n'est pas nécessaire lors de la définition de la liste des lanceurs. Les éléments avec unity:// préfixe ne sont pas modifiables et ne peuvent pas être supprimés.

Les gsettings get com.canonical.Unity.Launcher favorites et gsettings set com.canonical.Unity.Launcher favorites les commandes peuvent être utilisées pour créer des fonctions dans votre ~/.bashrc , par exemple :

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"
}

Exemple :

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

2. Méthodes possibles de suppression et d'ajout à Unity Launcher

L'exemple le plus simple a déjà été montré - via gsettings utilitaire. La suppression et l'ajout d'un élément spécifique nécessite l'analyse des gsettings production. Cela peut être fait via sed ou awk utilitaires, et avec effort même dans bash . Cependant, je trouve que python permet l'approche la plus facile et le "chemin de moindre résistance". Ainsi, les exemples fournis ici utilisent gsettings conjointement avec python.

Voici un cas de suppression :

$ 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']

Que se passe-t-il ici ? Nous transmettons la sortie du gsettings get via un tuyau vers python. Python lit ensuite le flux d'entrée standard et utilise ast La bibliothèque évalue la représentation textuelle de la liste et la convertit en une liste réelle que Python peut reconnaître. Cela simplifie grandement le travail - si c'était awk ou sed, nous devrions nous occuper de supprimer et d'ajouter des caractères individuels. Enfin, nous supprimons (pop) le deuxième argument de la ligne de commande (indiqué par sys.argv[1] ) en trouvant son index dans la liste. Nous avons maintenant une nouvelle liste, qui peut être transmise via un tube à gsettings set

La commande complète est alors celle-ci :

$ 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 {}

Qui peut être joliment mis dans un ~/.bashrc fonctionner comme ceci :

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 {}
}

Quelques points à noter ici sont que nous devons imprimer à nouveau la représentation "chaîne" de la liste entre guillemets et la transmettre via xargs . L'idée avec l'ajout est similaire, sauf qu'au lieu de pop nous utilisons append fonction :

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 {}

}

Exemple d'exécution :

$ 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']
$ 

Ces fonctions ne doivent pas nécessairement faire partie de ~/.bashrc . Vous pouvez également les placer dans un script

3. utilitaire launcherctl.py

Au fil du temps, j'ai recherché et créé un ensemble de fonctions en python qui peuvent effectivement faire la même chose que gsettings utilitaire. En associant la puissance de python à ces fonctions, j'ai créé launcherctl.py utilitaire.

Connexe :Le pilote pour Intel HD est installé, mais les jeux se plaignent toujours que la 3D n'est pas prise en charge ?

Il s'agit d'un travail en cours et sera élargi pour inclure plus de fonctions à l'avenir. Pour cette question spécifique, je laisserai le code source tel qu'il apparaît dans la première version. D'autres versions et améliorations sont disponibles sur GitHub.

Quels sont les avantages de ce script par rapport aux fonctions bash ?
1. Il s'agit d'un utilitaire "centralisé" avec un objectif spécifique. Vous n'avez pas besoin d'avoir un script/fonction séparé pour chaque action.
2. Options de ligne de commande simples à utiliser
3. Lorsqu'il est utilisé en conjonction avec d'autres utilitaires, cela fournit un code plus lisible .

Utilisation :

Comme indiqué par le -h option de ligne de commande :

$ ./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

L'utilisation de la ligne de commande est simple.

Ajout :

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

Suppression :

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

Vider complètement le lanceur :

$ ./launcherctl.py -c 

Liste des éléments sur le lanceur :

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

Comme mentionné précédemment, il peut être utilisé avec d'autres commandes. Par exemple, en ajoutant à partir du fichier :

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

La même chose peut être utilisée avec la suppression d'éléments donnés à partir d'un fichier texte

Suppression d'un 3ème élément du dash bouton :

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

Obtention du code source et installation

Manière manuelle :

  1. Créer un répertoire ~/bin .
  2. Enregistrer le code source ci-dessous dans le fichier ~/bin/launcherctl.py
  3. Si vous êtes bash utilisateur, vous pouvez source ~/.profile , ou se déconnecter et se connecter. Le ~/bin répertoire sera ajouté à votre $PATH variable automatiquement. Pour ceux qui n'utilisent pas bash , ajoutez ~/bin à votre $PATH variable dans votre fichier de configuration du shell, comme ceci :PATH="$PATH:$HOME/bin

Comme je l'ai mentionné, les dernières modifications apportées au code vont dans le référentiel GitHub. Si vous avez git installé, les étapes sont plus simples :

  1. git clone https://github.com/SergKolo/sergrep.git ~/bin/sergrep
  2. echo "PATH=$PATH:$HOME/bin/sergrep" >> ~/.bashrc
  3. source ~/.bashrc . Après cette étape, vous pouvez appeler launcherctl.py comme toute autre commande. Obtenir des mises à jour est aussi simple que cd ~/bin/sergrep;git pull

Obtenir du code de GitHub sans git :

  1. cd /tmp
  2. wget https://github.com/SergKolo/sergrep/archive/master.zip
  3. unzip master.zip
  4. Si vous n'avez pas ~/bin , faites-le avec mkdir ~/bin
  5. mv sergrep-master/launcherctl.py ~/bin/launcherctl.py

Dans tous les cas, les mêmes règles s'appliquent - le script doit résider dans un répertoire ajouté à PATH variable et doit avoir des autorisations exécutables définies avec chmod +x launcherctl.py

Code source d'origine :

#!/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()

Remarques supplémentaires :

  • dans le passé, j'ai créé une réponse qui permet de définir la liste des lanceurs à partir du fichier :https://askubuntu.com/a/761021/295286
  • J'ai également créé un indicateur Unity pour basculer entre plusieurs listes. Voir les instructions ici :http://www.omgubuntu.co.uk/2016/09/launcher-list-indicator-update-ppa-workspaces
Connexes :Pas de son dans Ubuntu 13.04, seul le périphérique de sortie Dumthe est répertorié ?
Ubuntu
  1. Comment supprimer le lanceur de tableau de bord Amazon sur Ubuntu 20.04 Focal Fossa Linux

  2. Comment ouvrir un terminal dans Ubuntu 22.04

  3. Comment ajouter un fichier d'échange sur Ubuntu

  4. Comment ajouter une imprimante dans Ubuntu 11.10 | Ajouter une imprimante dans Ubuntu

  5. Comment installer l'émulateur de terminal Alacritty via PPA dans Ubuntu 20.04

Comment ajouter et supprimer des signets dans Ubuntu [Astuce pour débutant]

Comment ajouter ou supprimer une application de démarrage dans Ubuntu

Ubuntu Comment définir une adresse IP statique via un terminal et une interface graphique

Comment installer Teamviewer sur Ubuntu 20.04 via Terminal

Comment supprimer complètement les applications Google Chrome (par exemple Postman) sur Ubuntu 18.04 ?

Comment ajouter et supprimer des applications après la création sur Liveusb ?