Basé sur le commentaire de @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 bénéficier à d'autres ayant le même besoin.
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
from subprocess import run, PIPE
from pathlib import Chemin
import mimetypes
class CSSFileTypeError(Exception):
pass
class GDM3_alternatives:
'''Classe pour interroger et configurer gdm3.css.
Argument:
mytheme - chemin vers mon fichier de thème gnome-shell .css.
Attributs:
mytheme - chemin vers mon fichier de thème gnome-shell .css.
query - stdout de "update-alternatives --query gdm3.css" stocké dans une liste
link - chemin de gdm3.css
best - chemin alternatif de gdm3.css sélectionné en mode automatique
value - chemin alternatif actuel de gdm3.css
status - si gdm3.css est sélectionné en mode manuel ou automatique
max - valeur Priorité maximale de toutes les alternatives de gdm3.css installées
Méthodes:
exist() - détermine si "mytheme" est installé en tant qu'alternative de gdm3.css.
configure() - configure le fichier "mytheme" en tant qu'alternative gdm3.css.
'''
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 ] )
def exist( self ):
'''Méthode qui détermine si "mytheme.css" est installé en tant qu'alternative de gdm3.css. '''
if self.mytheme == None:
raise TypeError( 'Le fichier .css n'a pas été défini.' )
if not Chemin( self.mytheme ).exists():
raise FileNotFoundError( f'{self.mytheme} n'existe pas.' )
if 'css' not in mimetypes.guess_type( self.mytheme )[0] :
raise CSSFileTypeError( f'{self.mytheme} n'est pas un fichier css.' )
return True in [ True for line in self.query if self.mytheme in line ]
def configure( self ):
'''Méthode pour configurer le fichier de mon thème ".css" en tant qu'alternative gdm3.css.'''
def _config():
if 'auto' not in self.status:
run( [ 'update-alternatives', '--auto', 'gdm3.css' ] ) #Assurer que le mode automatique est utilisé
run( [ 'update-alternatives', '--install', self.link, 'gdm3.css', self.mytheme, str(self.max + 1) ] )
print( f'Configuré {self.mytheme} en tant qu'alternative gdm3.css.' )
if not self.exist():
_config()
elif self.value in self.mytheme:
print( f'{self.mytheme} est déjà une alternative gdm3.css.' )
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' #Changez ceci par le chemin de votre thème
gdm3 = GDM3_alternatives( mytheme )
gdm3.configure()
## Ce script doit être exécuté avec sudo. ##
Comment utiliser ce script :
- Enregistrez-le dans un fichier avec l'extension
.py
, par exemple myscript.py
.
- Changez la ligne
mytheme = '/usr/share/gnome-shell/theme/mytheme/mytheme.css'
pour afficher le chemin de votre thème .css
.
- Exécutez le script dans le terminal avec la permission sudo, c'est-à-dire tapez
sudo python3.6 myscript.py
. Ou ouvrez votre IDLE python en utilisant la permission sudo
et exécutez ce script python.
La version du update-alternatives
sur mon système Ubuntu 18.04 est :
$ update-alternatives --version
Version Debian d'update-alternatives 1.19.0.5.
Il s'agit d'un logiciel libre ; voir la licence publique générale GNU version 2 ou
ultérieure pour les conditions de copie. Il n'y a PAS de garantie.