#1 Le 21/05/2020, à 17:34
- Brice Jeunieaux
Désactiver / réactiver le clavier peu importe la machine ?
Bonjour / bonsoir,
comme recommandé dans le post #15 d'un de mes précédant sujets de discussion ( lien du sujet ), j'ouvre un nouveau sujet car je me pose des questions sur une fonctionnalité implémentée dans un de mes programmes.
Contexte : dans un script, lorsque l'on laisse l'utilisateur entrer quelque chose grâce à la commande read, ou même des fois quand on exécute des commandes echo en boucle, si l'utilisateur est un peu bourrin et pressé, il peut avoir tendance à spammer le clavier, laissant apparaître des affichages parasites de caractères et autres à des endroits non-voulus de l'écran, ce qui est gênant. Dans le but de remédier à cela, j'avais donc décidé qu'en dehors des commandes read, l'utilisateur ne pourrait pas entrer quoi que ce soit car le clavier serait désactivé.
Pour cela, j'ai récupéré l'identifiant du clavier et du "maître" (ou je ne sais quel autre nom lui donné) grâce à la commande xinput.
[brice@brice-Lenovo-G505] Aventure textuelle : > xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=9 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=13 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Lenovo EasyCamera: Lenovo EasyC id=10 [slave keyboard (3)]
↳ Ideapad extra buttons id=11 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=12 [slave keyboard (3)]
Ces identifiants extraits grâce à la commande grep, je les ai mis dans des variables, et grâce à la commande xinput float $idClavier, je peux à tout moment désactiver le clavier, et grâce à la commande xinput reattach $idClavier $idMaitre, je peux le réactiver à tout moment également.
Seulement, je ne savais pas que Kamaris, un membre sur mon précédant sujet de discussion, ne semblait pas être affecté par ces commandes (ce qui était à prévoir) dans mon script qu'il a testé (cf. post #15).
Du coup, là est ma question : est-ce que ce genre de pratiques peut être dangereux, en terme de sécurité, ou même juste de bon fonctionnement des commandes, d'une machine à l'autre ? Si non, est-ce qu'il existe un moyen "universel" pour désactiver et réactiver le clavier à volonté d'une autre manière que la mienne, peu importe la machine ?
Merci d'avance pour avoir pris le temps de me lire.
Dernière modification par Brice Jeunieaux (Le 21/05/2020, à 17:36)
Hors ligne
#2 Le 21/05/2020, à 17:56
- alduc31
Re : Désactiver / réactiver le clavier peu importe la machine ?
Salut,
Perso pour désactiver mon touchpad, je fais :
xinput set-int-prop "Touchpad ID" "Device Enabled" 8 0
et pour activer :
xinput set-int-prop "Touchpad ID" "Device Enabled" 8 1
Testé avec le clavier, fonctionne aussi.
Asus Vivobook S5406MA (Core Ultra 7 155H, 16Go, AX211)
Hors ligne
#3 Le 21/05/2020, à 21:54
- Brice Jeunieaux
Re : Désactiver / réactiver le clavier peu importe la machine ?
Salut, ça ne marche pas pour moi, et il faut justement que ça puisse marcher chez n'importe qui, peu importe le retour de la commande xinput.
Actuellement, dans mon cas, j'ai stocké les identifiants comme ceci (cf ci-dessous), à l'aide de grep et de cut, mais si ça n'a pas marché avec une personne, ça peut ne pas marcher avec des millions, et je dois éviter cela.
#Variables pour la désactivation du clavier###
idClavier=$(xinput list | grep 'AT Translated Set 2 keyboard' | cut -d '=' -f 2 | cut -d '[' -f 1 | cut -d ' ' -f 1)
idMaitre=$(xinput list | grep 'AT Translated Set 2 keyboard' | cut -d '=' -f 2 | cut -d '(' -f 2 | cut -d ')' -f 1 | cut -d ' ' -f 2)
xinput float $idClavier
[i][b]# Bla bla bla mon programme...[/b][/i]
xinput reattach $idClavier $idMaitre
Dernière modification par Brice Jeunieaux (Le 21/05/2020, à 21:55)
Hors ligne
#4 Le 21/05/2020, à 21:55
- DonutMan75
Re : Désactiver / réactiver le clavier peu importe la machine ?
Hello,
pas trop l'habitude d'utiliser xinput donc je ne peux pas répondre à ta question...
D'ailleurs est-ce que le clavier ne serait pas désactivé pour l'ensemble des processus utilisateurs du coup ?
Mais si l'idée est d'empêcher l'utilisateur d'entrer du texte dans *un* processus bash en particulier, n'est-il pas possible de désactiver temporairement stdin ?
https://superuser.com/questions/813472/ … ell-script
Hors ligne
#5 Le 21/05/2020, à 22:17
- kamaris
Re : Désactiver / réactiver le clavier peu importe la machine ?
Oui, je pencherais plutôt pour ça aussi, ça règlerait les problèmes de choix du clavier (qui peuvent être multiples : usb + portable, comme c'est mon cas), et de désactivation persistant après la fin du script, pour une raison ou une autre (ça doit être difficile de couvrir tous les cas à mon avis).
Tu commences par sauvegarder le tty dans une variable :
tty=$(tty)
puis quand tu veux fermer l'entrée standard, tu fais
exec 0<&-
et quand tu veux la rouvrir (nécessaire pour un read interactif, sinon il sortira en erreur), tu fais
exec 0<$tty
Hors ligne