Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/05/2020, à 18: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. smile

Dernière modification par Brice Jeunieaux (Le 21/05/2020, à 18:36)

Hors ligne

#2 Le 21/05/2020, à 18: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 UX325EA oled (i5-1135G7,16Go) avec Lunar 23.04 (base xubuntu modifiée)

Hors ligne

#3 Le 21/05/2020, à 22: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, à 22:55)

Hors ligne

#4 Le 21/05/2020, à 22: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, à 23: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