Problèmes et questions concernant les éditions Gnome, Deepin et Budgie.
Répondre

Économiseur d'écran et variante clavier fr

#1Messageil y a 4 ans

Bonjour,

C'est après plusieurs jours de recherches infructueuses et de trifouillages divers dans les fichiers de configuration que je prends la décision de m'en remettre à la collectivité et à sa sagacité…

Voilà le problème : sur une installation toute fraîche de Manjaro 18.1.0/Deepin, l'utilisation d'un économiseur d'écran fait systématiquement « sauter » la variante du clavier. Configuré en French (alt.) dans le Centre de contrôle Deepin, le clavier repasse en simple French après le retour à la session (protégée par mot de passe). Même si le Centre de contrôle continue d'afficher bravement French (alt.), le clavier n'est plus configuré comme tel : AltGr + o ne donne plus « œ » mais « ø », etc. Ce que confirme d'ailleurs manjaro-settings-manager qui, lui, est passé de French (alt.) à French / Défaut.

Quitter puis rouvrir la session remet les choses d'équerre, de même que redémarrer la machine.

Pour rentrer dans le détail, avant le déclenchement de l'économiseur d'écran, la commande setxkbmap -print affiche :

xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(azerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+fr(oss)+inet(evdev)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
et après retour à la session :

xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(azerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+fr+inet(evdev)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
Utiliser setxkbmap -layout fr -variant oss permet de rétablir la variante. J'ai bien tenté de régler le problème en l'inscrivant tour à tour dans les fichiers .xinitrc puis .Xkbmap de profil, mais rien n'y fait : à chaque sortie d'économiseur d'écran et retour à la session, pouf, clavier fr sans oss. Inutile de dire que tout ce que /etc/X11 compte de fichiers de configuration a été modifié avec espoir, mais que, pour le moment, ce fut en vain.

Je sèche, même si je soupçonne Deepin ou LightDM d'être à l'origine du bidule, quelque chose comme la relecture d'un paramètre bien caché et son application.

Un peu d'aide serait la bienvenue, car même si le problème est somme toute mineur, il n'en est pas moins furieusement agaçant.

Bien cordialement.

Économiseur d'écran et variante clavier fr

#2Messageil y a 4 ans

Hello,

Idée N1 : Tu a tester de faire un script qui ce lance lors du chargement de la session avec la bonne commande pour changer de clavier ?
Idée N2 : Tu peut poster ton fichier .xinitrc ? avec les changements que tu a fait.

Économiseur d'écran et variante clavier fr

#3Messageil y a 4 ans

Bonjour et bienvenue.
Peux-tu nous donner le contenu de /etc/default/keyboard ?
Tu peux aussi essayer de lancer kbctl -l FR.

Économiseur d'écran et variante clavier fr

#4Messageil y a 4 ans

Bonsoir,

Merci de m'accueillir et me répondre si vite...

Alors, pour le contenu de /etc/default/keyboard :

XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT="oss"
XKBOPTIONS="grp:alt_shift_toggle"
BACKSPACE="guess"
(sachant que c'est moi qui ai ajouté XKBVARIANT="oss" dans l'espoir de changer quelque chose à la situation).
En revanche, la commande kbctl -l FR n'est pas reconnue, le programme n'étant vraisemblablement installé — ce que je vais essayer illico de faire.

Pour ce qui est du contenu de « mon » .xinitrc, voici ce que j'ai rajouté d'abord au début du fichier (soit juste en dessous de #!/bin/sh et ensuite à la toute fin du fichier :

setxkbmap -layout fr -variant oss
Idem : aucun résultat.

J'ai également tenté le script en ouverture de session (un fichier .sh ajouté au démarrage et contenant la commande qui fonctionne très bien dans un terminal, setxkbmap -layout fr -variant oss), mais malheureusement, au sortir de l'économiseur d'écran, les scripts d'ouverture de session ne sont pas excutés de nouveau. Donc, rien…

Voilà...

Pour le moment, je suis en train de fouiller dans les paramètres de deepin-screensaver, des fois qu'il irait recharger quelques configurations de base du système au moment où il s'arrête pour rendre la main à l'utilisateur ; on ne sait jamais...

====================================================

PS : Nulle part je ne trouve le programme kbctl, ni via pacman ni dans pamac. Faut-il le compiler « à la main » ?

Économiseur d'écran et variante clavier fr

#5Messageil y a 4 ans

Je ne sais pas trop comment deepin fonctionne mais j'ai vu sur le github que des gens ont des soucis avec le clavier.

Concernant le fichier xinit il faut rajouter & à la fin de ta commande pour qu'il exécute le reste.

setxkbmap -layout fr -variant oss &

Économiseur d'écran et variante clavier fr

#6Messageil y a 4 ans

Merci pour le tuyau du « & » à la fin de la commande dans le fichier .xinitrc, je m'en souviendrai. Malheureusement, ça ne résout pas le problème.

Du coup, oui, je vais aller faire un tour sur le github de Deepin.

Économiseur d'écran et variante clavier fr

#7Messageil y a 4 ans

Si tu va dans manjaro-settings-manager pour changer le clavier tu a encore le problème ?
Tu a peut être plusieurs clavier en même temps de disponible dans les configs ? ( Il ce peut que linux passe d'un clavier a un autre sous deepin )

Économiseur d'écran et variante clavier fr

#8Messageil y a 4 ans

Bonjour.
kbctl est un alias de keyboardctl qui remonte au début de l’aventure Manjaro. normalement, il dépend de ckbcomp.
Ça permet notamment de retrouver une configuration azerty en tty quand un clavier recharge la configuration par défaut. Ça ne dure que le temps de la session, mais ça donne une idée du problème.
Clairement, il semblerait bien que ça vienne de Deepin.
A vérifier que du aies bien ckbcomp d'installer. Si oui, essaye loadkeys fr. Si c'est bon, on peut alors rajouter la commande dans le ~/.xinitrc
Créer temporairement un deuxième utilisateur histoire de voir si c'est lié à ta conf utilisateur ou si c'est proposé par Deepin .
Renommer provisoirement ~.config/ afin de repartir sur une configuration utilisateur vierge après reconnexion à la session.

Économiseur d'écran et variante clavier fr

#9Messageil y a 4 ans

Bonjour,

Alors, pour répondre à Cyberdr3am :
Si tu va dans manjaro-settings-manager pour changer le clavier tu a encore le problème ?
la réponse est oui, et en ce qui concerne la seconde remarque : non (il n'y a qu'une seule configuration de clavier).

ckbcomp est bien installé, mais aucune commande telles que keyboardctl ou kbctl n'existent (même après une réinstallation de ckbcomp). Mystère.

Le même problème se pose avec un nouvel utilisateur.

D'autre part, j'ai procédé à une installation « vierge » de la même distribution au sein d'une machine virtuelle (VirtualBox) : problème identique.

Comme je commençais à m'impatienter, j'ai codé sauvagement et très salement un script Python pour pallier au problème (code ci-desssous). Lancé au démarrage de session par son appel dans .profile, il dépanne, mais, franchement, c'est de la bidouille cra-cra et ça ne me plaît que moyennement.

Je continue de chercher…

Merci pour votre aide !

==============================

Le code :

#!/usr/bin/env python3
# -*- coding: utf-8 -*- #
import os
import sys
import time
import subprocess
import getpass
import datetime

# Nom de l'utilisateur courant :
currentUser = getpass.getuser()

# Log (phase test)
logfile = os.path.join('/home', currentUser, '.watchkeyboardvariant.log')         
def logging(msg):
    d = ('[%s] %s\n' % (datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), msg))    
    w = open(logfile, 'a') if os.path.isfile(logfile) else open(logfile, 'w')
    w.writelines(d)
    w.close()

# Formatage de la sortie de setxkbmap :
def formatLine(l):
    return l.decode("utf-8").strip('\t').strip('\n')


# Démarrage :
logging("Démarrage")

while True:
    time.sleep(5)
    
    # Fichier de configuration Deepin de l'utilisateur courant
    deepinUserAccount = os.path.join("/var/lib/AccountsService/deepin/users", currentUser)
    if not os.path.isfile(deepinUserAccount):
        continue
    
    # Lecture du fichier de conf et récupération du layout courant
    readDeepinUserAccount = open(deepinUserAccount, 'r').readlines()
    currentLayout = [l.split("=")[1].strip("\n") for l in readDeepinUserAccount if l.startswith("Layout=")][0]
    if not currentLayout:
        continue
    
    # On crée un tableau avec d'une part la localisation du clavier et, d'autre part, la cas échéant, la variante :
    currentLayout = currentLayout.split(';')
    # S'il n'y a pas de variante définie, on quitte
    if not currentLayout[1]:
        continue
    
    # Exécution de la commande setxkbmap et récupération de son résultat pour analyse
    setxkbmapPrint = subprocess.Popen(["setxkbmap", "-print"], stdin=None,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    setxkbmapStdout = []
    for l in setxkbmapPrint.stdout: setxkbmapStdout.append(formatLine(l))
    # -> La ligne qui nous intéresse, contenant la variante de clavier en cours d'utilisation
    xkbSymbols = ""
    for l in setxkbmapStdout:  
        if l.startswith('xkb_symbols'):
            xkbSymbols = l.split('"')[1]
            break
    
    # Comparaison avec le current layout et modification éventuelle   
    variant = "(%s)" % currentLayout[1]
    if not variant in xkbSymbols:
        setxkbmap = subprocess.Popen(["setxkbmap", "-layout", currentLayout[0], "-variant", currentLayout[1]], stdin=None,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        logging("Commande exécutée : setxkbmap -layout %s -variant %s" % (currentLayout[0], currentLayout[1]))

Économiseur d'écran et variante clavier fr

#10Messageil y a 4 ans

Économiseur d'écran et variante clavier fr

#11Messageil y a 4 ans

Merci pour l'info :merci:

Économiseur d'écran et variante clavier fr

#12Messageil y a 4 ans

Bonjour,

Suite (et fin provisoire)…

Étant de nature peu patiente, plutôt que d'attendre un hypothétique fix de chez Deepin, j'ai choisi d'appliquer le patch proposé par un certain Foxai :

https://github.com/linuxdeepin/dde-sess ... /152/files

Naturellement, une mise à jour et tout sera à recommencer, à moins que la mise à jour en question prenne le patch en compte…

Pour ceux que cela intéresserait, voici les étapes à suivre…

Outils à installer :
  • deepin-gettext-tools
  • doxygen
  • golang-github-linuxdeepin-go-dbus-factory
  • golang-github-golang-freetype
  • qt5
  • pkgconf
D'autres dépendances sont indiquées sur la page github, mais elles sont déjà présentes sur l'installation "full".

sudo pacman -Syu --noconfirm deepin-gettext-tools qt5-gsettings qt5 doxygen golang-github-linuxdeepin-go-dbus-factory pkgconf golang-github-golang-freetype
Récupération des sources avec git :

mkdir ~/GIT
cd ~/GIT
git clone https://github.com/linuxdeepin/deepin-tool-kit.git
git clone https://github.com/linuxdeepin/dde-session-ui.git
Compilation de deepin-tool-kit

cd deepin-tool-kit
Les liens présents dans le fichier Makefile sont invalides.
Il faut remplacer :

        git clone  https://cr.deepin.io/dtkwidget dtkwidget
        git clone  https://cr.deepin.io/dtkcore dtkcore
        git clone  https://cr.deepin.io/dtkwm dtkwm
Par :

        git clone  https://github.com/linuxdeepin/dtkwidget.git dtkwidget
        git clone  https://github.com/linuxdeepin/dtkcore.git dtkcore
        git clone  https://github.com/linuxdeepin/dtkwm.git dtkwm
Avec sed, ça va vite :

sed -i 's/cr.deepin.io\/dtkwidget/github.com\/linuxdeepin\/dtkwidget.git/g' Makefile && \
sed -i 's/cr.deepin.io\/dtkcore/github.com\/linuxdeepin\/dtkcore.git/g' Makefile && \
sed -i 's/cr.deepin.io\/dtkwm/github.com\/linuxdeepin\/dtkwm.git/g' Makefile
Compilation :

make
sudo make install
Compilation de dde-session-ui

cd ~/GIT/dde-session-ui
C'est dans le fichier widgets/kblayoutwidget.cpp que se trouve le bug, à la ligne 168 :

proc->start("setxkbmap", QStringList() << "-model" << model << "-layout" << kbd.split(";").first());
doit être remplacé par :

qDebug() << "Working on layout string:" << kbd;
QStringList layout = kbd.split(";");
QStringList xkb_command;xkb_command << "-model" << model << "-layout" << layout.first();
if(layout.length() > 1)
    xkb_command << "-variant" << layout.at(1);
proc->start("setxkbmap", xkb_command);
Sauvegarde du fichier orginal :

cp widgets/kblayoutwidget.cpp widgets/kblayoutwidget.cpp.bak
Et remplacement de la ligne "défectueuse" :

sed -i 's/proc->start("setxkbmap", QStringList() << "-model" << model << "-layout" << kbd.split(";").first());/qDebug() << "Working on layout string:" << kbd;QStringList layout = kbd.split(";");QStringList xkb_command;xkb_command << "-model" << model << "-layout" << layout.first();if(layout.length() > 1)xkb_command << "-variant" << layout.at(1);proc->start("setxkbmap", xkb_command);/g' widgets/kblayoutwidget.cpp
Compilation :

mkdir BUILD && cd BUILD
qmake PREFIX=/usr .. && make
sudo make install
Redémarrer.
Chez moi, ça marche : au sortir de l'écran de veille ou de l'économiseur d'écran, la variante du clavier est bien reprise en compte.
Et c'est bien.

Merci à tous pour votre aide.

SW.

****************

Petite cerise, j'en ai profité pour installer deepin-font-installer qui est drôlement pratique et bien fichu :

cd ~/GIT
git clone https://github.com/linuxdeepin/deepin-font-installer.git
cd deepin-font-installer
mkdir BUILD && cd BUILD
qmake PREFIX=/usr .. && make
sudo make install

Économiseur d'écran et variante clavier fr

#13Messageil y a 4 ans

Bravo et merci pour ta contribution, mais détail très important, on ne fait pas make install sous Arch et donc Manjaro, mais on passe par un PKGBUILD qui invoquera cette fonction.
Il est plus que nécessaire de passer par ce script car libalpm qui est le gestionnaire de paquet et donc pacman et pamac qui en sont des front-end doivent gérer les dépendances en flux continu et si un paquet est installé directement, ça conduira tôt ou tard à des conflits de fichiers déjà présents.
C'est un peu rébarbatif au début, mais après on s'y fait très vite et c'est un bon moyen de partager son travail.

Économiseur d'écran et variante clavier fr

#14Messageil y a 4 ans

Oups !
Merci du tuyau. Je viens de Debian : make && make install, c'est un réflexe.
Je corrigerai.
SW
Répondre