Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2011, 21h48   #1
Membre à l'essai
 
Roman Adamski
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Roman Adamski
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 20
Points : 20
Par défaut Comment tromper get_tty ?

Bonsoir à tous,

Ayant récemment découvert le jeu NetHack en console de commande, mais n'aimant pas les contrôles clavier fournit, je me suis mis en tête d'écrire un petit programme pour changer mes frappes claviers et à l'aide d'une pipe, redéfinir les contrôles par défaut du jeu et éventuellement programmer des macros.

Code :
1
2
 
[moi@localhost Bureau]$ ./changekey | nethack
Problème, NetHack semble détecter que les entrées sont fournis par une pipe et non pas directement par le terminal :

Code :
1
2
3
 
NetHack (gettty): Invalid argument
You must play from a terminal.
Comment puis-je tromper nethack et profiter de la richesse offerte par ce jeu ?

Merci d'avance.

edit : Si jamais çà a un impact, j'utilise le système fedora core 9.
Roman_Adamski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 12h30   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Modifier les commandes nethack n'est pas simple du tout (je suis un joueur régulier aussi), déjà par le nombre de combinaisons disponibles, sans compter les commandes textuelles comme loot, pray, etc...

Il sera bien plus simple de repartir du code source et de changer les touches à ce niveau là.

Néanmoins, Nethack est un jeux Unix pour Unix qui conserve la logique Unix dans ses commandes internes, autrement dit il est optimisé au maximum pour les utilisateur unix.

Si tu as du mal avec ce jeux, l'autre astuce consiste à te procurer un claver qwerty, ce qui rend cette logique encore plus efficace.

Quelle(s) gamme(s) de commandes te pose(nt) problème ?
direction ?
mouvements ?
Gestion équipement ?
Magie ?
Commerce ?
Commandes textuelles ?
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h21   #3
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
As-tu essayé xargs?
http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs

Code :
1
2
 
./changekey | xargs nethack
Tu peux aussi scripter les saisie clavier d'une commande de la façon suivante:

Code :
1
2
3
4
5
6
7
 
nethack <<EOF
a
b
c
d
EOF
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h20   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par jabbounet Voir le message
Tu peux aussi scripter les saisie clavier d'une commande de la façon suivante:

Code :
1
2
3
4
5
6
7
 
nethack <<EOF
a
b
c
d
EOF
cette solution n'est pas applicable à nethack puisque les frappes de touches ne peuvent pas être prévues/connues à l'avance.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 14h22   #5
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
je viens de voir ce que faisais cette commande, effectivement....
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h03   #6
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 034
Points : 2 034
Le plus simple pour faire ce que tu veux faire, ça serait je pense d'écrire ton programme "changekey" en Expect, qui est fait pour ça. Mais à mon avis ça va être effectivement beaucoup plus dur que tu ne l'imagines.
matafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 16h18   #7
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
et xargs ? qui est l'autre solution que j'ai proposée ?
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 17h06   #8
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 375
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 375
Points : 2 034
Points : 2 034
Je ne pas vois pas comment xargs peut être utilisé dans ce contexte. L'exemple que tu as donné exécuterait la commande "nethack" avec en argument les entrées modifiées.
matafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 17h08   #9
Membre à l'essai
 
Roman Adamski
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Roman Adamski
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 20
Points : 20
@all:
Pour ceux qui ne connaissent pas, nethack est un jeu de rôle façon porte/monstre/trésors en console de commande, est gratuit et est très riche (rien à envier à diablo de Blizzard).

@frp13 :
Comme je joue depuis mon "vieux" portable ibm, j'ai un clavier azerty sans pavé numérique. Donc je peux mettre aux oubliettes les commandes [1-9] pour me déplacer.
J'ai déjà pris l'habitude de [yubn] avec rogue pour me déplacer en diagonale, mais j'ai vraiment du mal avec [hjkl] que je souhaiterais remplacer par les touches fléchées.
Mon programme changekey fait çà très bien :
Il passe son terminal d'exécution en mode raw de façon à ce que je n'aie pas besoin d'appuyer sur entrée à chaque commande, et suivant la touche sur laquelle j'ai appuyé, il affichera à l'écran la commande que je veux lui associer.

@jabbounet :
l'utilisation de xargs n'a pas résolu mon problème, nethack me donne le message suivant :

Code :
1
2
3
4
 
[moi@localhost Bureau]$ ./changekey | xargs nethack
NetHack (gettty): Inappropriate ioctl for device
You must play from a terminal.
Et en plus nethack n'affiche rien en sortie tant que je n'ai pas quitté mon programme changekey, ce qui n'est pas terrible pour jouer...

@matafan:
S'agit-il de cet Expect ?
Je ne connais pas encore, je suis en train de regarder. Est-ce que Expect peut faire croire à nethack qu'il reçoit ses entrées depuis un terminal et non un pipe ?


Comme nethack veut être exécuté depuis un terminal j'ai pensé à d'abord lancer nethack sur un terminal, puis depuis un autre faire la commande :

Code :
1
2
 
[moi@localhost Bureau]$ ./changekey > /dev/pts/1
afin de rediriger la sortie de changekey vers le terminal d'exécution de nethack. Malheureusement, cette solution un peu naïve ne marche pas, le caractère envoyé par changekey n'est pas interprété par nethack et se contente de s'afficher par dessus la sortie précédente de nethack...

D'autres idées ?
Roman_Adamski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 17h31   #10
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Si le but c'est de mapper différemment ton clavier tu peux essayer de jouer avec setxkbmap / xmodmap
http://www.liafa.jussieu.fr/~carton/...X/xmodmap.html
http://www.delafond.org/traducmanfr/...modmap.1x.html
http://linux.die.net/man/1/setxkbmap
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/01/2011, 19h00   #11
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
ouais l'idée est pas si mauvaise, , ça se tente ça...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 19h26   #12
Membre à l'essai
 
Roman Adamski
Inscription : décembre 2010
Messages : 20
Détails du profil
Informations personnelles :
Nom : Roman Adamski
Âge : 26
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 20
Points : 20
Points : 20
@jabbounet:
Merci beaucoup pour tes liens, çà m'a permis de découvrir de nouvelles chôses. Effectivement directement modifier le mapping du clavier dans le système pourrait être une solution. Mais ce n'est pas un peu extrême ? Si je souhaite utiliser un programme de messagerie ou tout autre applications utilisant mon clavier il faudra que je change mon mapping à chaque fois que je change d'application, non ?
De plus, les raccourcis systèmes (exemple : Ctrl+Alt+flèche gauche ou droite pour passer d'un bureau à l'autre) ne fonctionneront plus tant que je naurais pas remis l'ancienne keymap...


Sinon en cherchant un peu sur le mot-clé Expect, j'ai trouvé le lien suivant sur le programme empty : http://empty.sourceforge.net/ (trouvé dans les liens externes de la page de wikipédia version anglais)

Grâce à empty, j'arrive à faire un pipeline de mon programme changekey vers nethack :

Dans une première console :
Code :
1
2
3
 
[moi@localhost Bureau]$ empty -f -i in.fifo -o out.fifo nethack
[moi@localhost Bureau]$ ./changekey | empty -s -o in.fifo
Dans la deuxième console :
Code :
1
2
 
[moi@localhost Bureau]$ cat out.fifo
En terme d'exécution, tout fonctionne normalement, les commandes envoyés par changekey sont bien interprété par nethack.
Le seul souci vient de l'affichage, à l'aide de la commande cat : celle-ci n'est pas prévu pour afficher le contenu dynamique de la sortie d'un pipeline => cat vide le fichier lors de sa lecture et ne réactualise pas automatiquement le contenu.

Connaissez-vous un petit utilitaire qui pourrait remplir cette fonction ?
Ou sinon savez-vous quels fonctions je pourrais utiliser dans un nouveau programme pour lire le contenu de la pipe sans le retirer en même temps du fichier (comme celà est fait automatiquement avec les fonctions "classiques") ?
Pour autant que j'ai pu le constater NetHack ne ré-écrit que les caractères qui changent...
Roman_Adamski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 21h45   #13
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h37.


 
 
 
 
Partenaires

Hébergement Web