IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment tromper get_tty ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 : 5 196
    Par défaut
    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 ?

  3. #3
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    As-tu essayé xargs?
    http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./changekey | xargs nethack
    Tu peux aussi scripter les saisie clavier d'une commande de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    nethack <<EOF
    a
    b
    c
    d
    EOF

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 : 5 196
    Par défaut
    Citation Envoyé par jabbounet Voir le message
    Tu peux aussi scripter les saisie clavier d'une commande de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    je viens de voir ce que faisais cette commande, effectivement....

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    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.

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    et xargs ? qui est l'autre solution que j'ai proposée ?

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    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.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 20
    Par défaut
    @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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  10. #10
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    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

  11. #11
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 : 5 196
    Par défaut
    ouais l'idée est pas si mauvaise, , ça se tente ça...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 20
    Par défaut
    @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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  13. #13
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  2. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  3. Réponses: 7
    Dernier message: 01/05/2002, 20h23
  4. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41
  5. Comment débuter en programmation ?
    Par Marc Lussac dans le forum Débuter
    Réponses: 0
    Dernier message: 08/04/2002, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo