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.
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.
(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...
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 )
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.
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!
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]))
É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 :
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
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.
Noyau récent MANJARO x86_64 bits: 64 Xfce 4.16
ASUSTeK model: PRIME B350M-A v: Rev X.0x
6-Core: AMD Ryzen 5 2600X
AMD Baffin [Radeon RX 460/560D / Pro
driver: amdgpu v: kernel
Display: x11 server: X.Org driver: amdgpu,ati unloaded: modesetting
OpenGL: renderer: Radeon RX 560 Series
Arch en Dual. Aucun lien publicitaire ne saurait être toléré dans la signature!