Envoi de touches de fonction (F1-F12) via SSH


13

J'ai une machine Fedora sur laquelle je peux SSH. L'un des programmes que j'aimerais utiliser occasionnellement utilise les touches de fonction. Le problème est que je suis SSH'ing d'une tablette Android (ASUS Transformer Infinity) avec un clavier physique, mais pas F1- F12clés. Donc, jusqu'à ce que l'application terminale que j'utilise (VX ConnectBot) décide de les ajouter en tant que fonctionnalité, je cherche un moyen de les envoyer en utilisant le reste du clavier.

Je peux utiliser tous les caractères ASCII imprimables, Esc, Ctrl, Shift, Enteret Tab.


Je pense que vous feriez mieux de demander sur Android.SE.
derobert

Réponses:


25

Les terminaux ne comprennent que les caractères, pas les clés. Ainsi, toutes les touches de fonction sont codées comme des séquences de caractères, en utilisant des caractères de contrôle. Hormis quelques-uns courants qui ont un caractère de contrôle associé ( Tabest Ctrl+I, Enterest Ctrl+M, Escest Ctrl+[), les touches de fonction envoient des séquences d'échappement, commençant par Ctrl+[ [ou Ctrl+[ O. Vous pouvez utiliser la tputcommande pour voir ce que les applications de séquence d'échappement attendent pour chaque touche de fonction sur votre terminal. Ces séquences sont stockées dans la terminfobase de données. Par exemple, l'extrait de shell ci-dessous montre les séquences d'échappement correspondant à chaque touche de fonction.

$ for x in {1..12}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
F1 ^[OP
F2 ^[OQ
F3 ^[OR
F4 ^[OS
F5 ^[[15~
F6 ^[[17~
F7 ^[[18~
F8 ^[[19~
F9 ^[[20~
F10 ^[[21~
F11 ^[[23~
F12 ^[[24~

Une autre façon de voir la séquence d'échappement d'une touche de fonction consiste à appuyer sur Ctrl+ Vdans une application de terminal qui ne lie pas la touche Ctrl+ V(comme le shell). Ctrl+ Vinsère littéralement le caractère suivant (qui sera le caractère d'échappement), et vous pourrez voir le reste de la séquence, qui se compose de caractères ordinaires.

Étant donné que les séquences peuvent être difficiles à taper, étudiez la possibilité de modifier les liaisons de touches dans votre application ou d'utiliser un autre émulateur de terminal. Notez également que vous pouvez avoir une limite de temps: certaines applications ne reconnaissent les séquences d'échappement que si elles arrivent assez rapidement, afin qu'elles puissent donner un sens à la Escclé seule.


Comment ajouter des touches de fonction décalées à la liste fournie par votre commande?
drevicko

1
@drevicko Sur xterm, Shift + F1 est kf13, Shift + F2 est kf14, etc. Ensuite Ctrl + F1 est kf25, Ctrl + Shift + F1 est kf37, Alt + F1 est kf49. Je ne sais pas si cela fonctionne sur d'autres terminaux ni ce que vous obtenez si vous avez une vraie clé F13.
Gilles 'SO- arrête d'être méchant'

3

Android Terminal Emulator par Jack Palevich utilise des combinaisons de touches avec les touches de volume pour envoyer une variété de touches, y compris les touches de fonction. Il y a aussi le clavier de Hacker qui a toutes les touches disponibles qu'un vrai clavier aurait.


Merci, le clavier Hacker devrait couvrir ce dont j'ai besoin pour l'instant.
Sizik
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.