web-dev-qa-db-fra.com

Comment attribuer un numéro de priorité à "update-alternatives --config gdm3.css" dans une seule ligne de commande?

Je peux exécuter ces commandes dans le terminal:

$ Sudo update-alternatives --install /usr/share/gnome-Shell/theme/gdm3.css gdm3.css /usr/share/gnome-Shell/theme/mytheme/mytheme.css 10
$ Sudo update-alternatives --config gdm3.css
There are 2 choices for the alternative gdm3.css (providing /usr/share/gnome-Shell/theme/gdm3.css).

  Selection    Path                                                    Priority   Status
------------------------------------------------------------
* 0            /usr/share/gnome-Shell/theme/ubuntu.css                  10        auto mode
  1            /usr/share/gnome-Shell/theme/mytheme/mytheme.css         10        manual mode
  2            /usr/share/gnome-Shell/theme/ubuntu.css                  10        manual mode

Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/share/gnome-Shell/theme/mytheme/mytheme.css to provide /usr/share/gnome-Shell/theme/gdm3.css (gdm3.css) in manual mode

Je mettrai ces deux cmds dans python3.6 subprocess.run ().

Le problème que j'ai est avec la deuxième commande. Comment attribuer /usr/share/gnome-Shell/theme/mytheme/mytheme.css pour être l'alternative de gdm3.css dans la même ligne de commande que Sudo update-alternatives --config gdm3.css?

En outre, cette cmd nécessite une entrée numérique pour sélectionner mytheme.css. Le numéro attribué dépend de la priorité attribuée, ce qui signifie que le numéro attribué peut être assez arbitraire. Comment surmonter le caractère arbitraire du numéro attribué?

2
Sun Bear

Sur la base du commentaire @PRATAP, j'ai développé cette solution python3.6 à ma question. Cela a fonctionné sur mon système Ubuntu 18.04. J'espère que cela pourra profiter à d'autres ayant le même besoin.

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

from subprocess import run, PIPE
from pathlib import Path
import mimetypes

class CSSFileTypeError(Exception):
    pass

class GDM3_alternatives:
    '''Class to query and configure gdm3.css.

    Argument:
      mytheme - path to my gnome-Shell theme .css file.

    Attributes:
      mytheme - path to my gnome-Shell theme .css file.
      query   - stdout from "update-alternatives --query gdm3.css" store in a list
      link    - gdm3.css path
      best    - gdm3.css alternative path selected by auto mode 
      value   - current gdm3.css alternative path 
      status  - whether gdm3.css is selected by manual or automatic mode 
      max     - maximum Priority value of all the installed gdm3.css alternatives

    Methods:
      exist()     - determines whether "mytheme" is installed as a gdm3.css alternative.
      configure() - configure "mytheme" file as a gdm3.css alternative.
    '''
    def __init__( self, mytheme=None ):       
        def _get( qvalue ):
            return [ line[ line.index('/') : ] for line in self.query if qvalue in line ][0]
        self.mytheme = mytheme
        self.query = run( [ 'update-alternatives', '--query', 'gdm3.css' ],
                          stdout=PIPE, encoding="utf-8" ).stdout.splitlines()
        self.link   = _get( 'Link:' )
        self.best   = _get( 'Best:' )
        self.value  = _get( 'Value:' )
        self.status = [ line[ line.index(':')+2 : ] for line in self.query if 'Status:' in line ][0]
        self.max = max( [ int( line[ line.index(':')+1 : ] ) for line in self.query if 'Priority:' in line ] )
        #print( f'self.query = {self.query}' )  #For debugging
        #print( f'self.link  = {self.link}' )   #For debugging
        #print( f'self.best  = {self.best}' )   #For debugging
        #print( f'self.value = {self.value}' )  #For debugging
        #print( f'self.status= {self.status}' ) #For debugging
        #print( f'self.max   = {self.max}' )    #For debugging

    def exist( self ):
        '''Method that determines whether "mytheme.css" is installed as a gdm3.css alternative. '''
        if self.mytheme == None:
            raise TypeError( '.css file was not defined.' ) 
        if not Path( self.mytheme ).exists():
            raise FileNotFoundError( f'{self.mytheme} does not exist.' )
        if 'css' not in mimetypes.guess_type( self.mytheme )[0] :
            raise CSSFileTypeError( f'{self.mytheme} is not a css file.' )
        return True in [ True for line in self.query if self.mytheme in line ]

    def configure( self ):
        '''Method to configure my theme ".css" file as a gdm3.css alternative.'''
        def _config():
            if 'auto' not in self.status:
                run( [ 'update-alternatives', '--auto', 'gdm3.css' ] ) #Ensure auto mode is used
            run( [ 'update-alternatives', '--install', self.link, 'gdm3.css', self.mytheme, str(self.max + 1) ] )
            print( f'Configured {self.mytheme} as gdm3.css alternative.' )

        if not self.exist():
            _config()
        Elif self.value in self.mytheme:
            print( f'{self.mytheme} is already gdm3.css alternative.' )
        else:
            run( [ 'update-alternatives', '--remove', 'gdm3.css', self.mytheme ] )
            self.__init__( self.mytheme )
            _config()

if __name__ == '__main__':
    #mytheme = '/usr/share/gnome-Shell/theme/mytheme/mytheme.css' 
    mytheme = '/usr/share/gnome-Shell/theme/mytheme/mytheme.css' #Change this to your theme
    gdm3 = GDM3_alternatives( mytheme )
    gdm3.configure()

## This script needs to be executed by Sudo. ## 

Comment utiliser ce script:

  1. Enregistrez-le dans un fichier avec l'extension .py, Par exemple myscript.py.
  2. Modifiez la ligne mytheme = '/usr/share/gnome-Shell/theme/mytheme/mytheme.css' Pour afficher le chemin .css De votre thème.
  3. Exécutez le script sur le terminal avec l'autorisation Sudo, c'est-à-dire tapez Sudo python3.6 myscript.py. Ou ouvrez votre python IDLE en utilisant l'autorisation Sudo et exécutez ce script python.

La version du update-alternatives Sur mon système Ubuntu 18.04 est:

$ update-alternatives --version
Debian update-alternatives version 1.19.0.5.

This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.
1
Sun Bear