Je voudrais écrire un script pour désactiver le clavier. J'écris xinput disable 13
comme id du clavier intégré = 13. Mais que se passe-t-il si l'id change d'une façon ou d'une autre? Alors ça ne marchera plus. C'est pourquoi je dois écrire un meilleur script, celui qui utilise grep.
Pour l'instant, j'ai ce
xinput list|grep AT|grep id=
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
J'ai ajouté cut -f 2
à ma commande, donc il affiche ceci> id = 13 Donc, pour l'instant, j'ai 'id = 13', mais je n'ai besoin que de 13, sans id =, donc je pourrais assigner cette valeur à une variable, pour la passer à xinput disable $variable
Quelqu'un peut-il m'aider à terminer mon script?
Cela devrait fonctionner pour vous.
xinput list|grep AT|grep id=|cut -f 2|cut -f 2 -d =
La commande cut
a une option pour spécifier le délimiteur.
xinput list|grep AT|grep id=|cut -f 2
Cela vous donne id=13
, donc passez-le à une autre commande de coupe en spécifiant le délimiteur comme =
exemple
~$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Dell Premium USB Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ DualPoint Stick id=15 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=16 [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)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Dell Dell USB Keyboard Hub id=11 [slave keyboard (3)]
↳ Dell Dell USB Keyboard Hub id=12 [slave keyboard (3)]
↳ Laptop_Integrated_Webcam_FHD id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ Dell WMI hotkeys id=17 [slave keyboard (3)]
~$ xinput list|grep AT|grep id=|cut -f 2|cut -f 2 -d =
14
Vous n'avez pas besoin de spécifier un index numérique, les commandes suivantes suffisent:
xinput --disable 'AT Translated Set 2 keyboard'
Jetez un œil à la page de manuel de xinput pour plus de recettes.
Si vous souhaitez analyser l'ID à l'aide de grep, vous pouvez utiliser ce qui suit:
$ xinput list | grep -Po 'AT.*id=\K[0-9]+'
13
Pour plus de détails sur \K
, voir Grep ne peut-il afficher que les groupes spécifiés qui correspondent? .
Vous voulez donc une sous-chaîne?
string = $ (xinput | grep HID | cut -f 2); echo $ {string: 3}
Cela ne fonctionne pas dans Shell uniquement dans bash
chad @ M4A79XTD-EVO: ~ $ xinput ⎡ ID du pointeur du noyau virtuel = 2 [pointeur maître (3)] ⎜ ↳ ID du pointeur du noyau virtuel XTEST = 4 [pointeur esclave (2)] ⎜ ↳ HID 04b4: 0033 id = 8 [pointeur esclave (2)] ⎣ ID du clavier du noyau virtuel = 3 [clavier maître (2)] ↳ ID du clavier du noyau virtuel XTEST = 5 [clavier esclave (3)] Id ID du bouton d'alimentation = 6 [clavier esclave (3)] ↳ ID du bouton d'alimentation = 7 [clavier esclave (3)] ↳ AT Translated Set 2 keyboard id = 9 [slave slave (3)] Chad @ M4A79XTD-EVO: ~ $ string = $ (xinput | grep HID | cut -f 2); echo $ {string: 3} 8
Bien que cela soit ancien, cela m'a conduit à ma solution qui est beaucoup plus simple que les réponses précédentes. Vérifier les pages de manuel comme Lekensteyn l'a suggéré et c'est ce que j'ai trouvé.
# Keyboard, TouchPad, Mouse, etc...
DvcName=`xinput list --name-only | grep "QueryYourDevice"`
DvcId=`xinput list --id-only "$DvcName"` # Save Device Id.....
Vous avez maintenant à la fois le nom et l'identifiant de l'appareil stockés et pouvez les utiliser facilement tout au long du script.
Même si vous pouvez utiliser grep pour cela, je pense que vous feriez mieux avec sed ici:
xinput list | sed -nr 's/.*AT.*keyboard.*id=([0-9]*).*/\1/p'