Announcement

Collapse
No announcement yet.

showkey in Ruby-Thread auslesen (Linux)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • showkey in Ruby-Thread auslesen (Linux)

    Liebe Entwicklergemeinde,

    ich habe ein Problem, das ich offenbar nicht selbst lösen kann und bitte euch um Unterstützung.

    In einer Ruby-Datei steht folgender Code:

    Thread.new{`showkey>consoleKey`}

    Führe ich diesen in der Ruby-Konsole (irb) aus, endet showkey nach 10 Sekunden ohne Eingabe. Auch die Datei wird mit dem showkey-Output gefüllt.

    Führe ich jedoch die Datei mit dem Ruby-Interpreter in der Linux-Konsole (außerhalb von X-Window) aus, funktioniert beides nicht. Infolgedessen muss ich jedesmal meinen Rechner neustarten, weil sämtliche Tastatureingaben von showkey abgefangen werden.

    Sichtbar wird folgende Fehlermeldung: tcsetattr: Input / output error

    Dies ist für mich sehr frustrierend, weil es beim Testen eine Menge Zeit frisst und ich natürlich gerne weiterprogrammieren möchte.

    Ich würde mich über einen konkreten Lösungsvorschlag in Form eines alternativen Ruby-Codes sehr freuen, bevor ich in die Tiefen von Linux oder Ruby einsteigen müsste.

    Das Problem habe ich gründlich recherchiert, jedoch keine Lösung gefunden.

    Vielen herzlichen Dank!

  • #2
    Auch die Datei wird mit dem showkey-Output gefüllt.
    Welche Datei?

    Führe ich jedoch die Datei mit dem Ruby-Interpreter in der Linux-Konsole (außerhalb von X-Window) aus, funktioniert beides nicht.
    Beides was?

    Alles was man sagen kann ist

    Es wird ein neuer Thread erstellt.
    Christian

    Comment


    • #3
      Datei: consoleKey

      beides: Datei wird mit showkey-Output gefüllt und showkey beendet sich nach 10 Sekunden ohne Eingabe (wie vorgesehen).

      Verzeihung für die unpräzise Beschreibung

      Comment


      • #4
        Mein Ziel ist es, die Ausgabe von showkey innherhalb eines Ruby-Threads in eine Datei umzuleiten (in der Linux-Konsole).

        Ich habe etwas gelesen von Prozessgruppen. showkey scheint aus dem Thread heraus das Terminal nicht richtig zu erreichen.

        Hat jemand eine Idee, ob man z. B. den Thread anders initialisieren könnte, sodass der Umgang von showkey mit der Konsole derselbe ist wie außerhalb des Threads?

        Bin für jede Hilfe dankbar!

        Comment


        • #5
          Hallo liebe Kollegen,

          ich konnte das Problem weiter abstrahieren:

          Wie schaffe ich es, dass folgende Eingabe in der Linux-Konsole (außerhalb X-Window) funktioniert?

          showkey>consoleKey &

          Showkey soll irgendwie im Hintergrund laufen, damit meine Software weiterarbeiten kann.

          Somit ist dies nur noch ein reines Linux-Problem.

          Hat jemand eine Idee? Bitte Bitte, bestimmt weiß das jemand von euch.

          Vielen Dank!

          Comment


          • #6
            showkey und consolekey sind doch keine Ruby-Kommandos. Und wenn wäre dies Ruby zu übergeben, analog zu xyz.exe Commad1 Command2
            Christian

            Comment


            • #7
              Hallo Christian, hast du auch eine Lösung parat?

              Das wäre prima.

              Comment


              • #8
                Nein, habe ich nicht; ich weiß noch nicht mal für was....
                Zuletzt editiert von Christian Marquardt; 13.07.2014, 17:24.
                Christian

                Comment


                • #9
                  Gib einfach mal folgendes in der Linux-Konsole (ohne X-Server) ein:

                  showkey>Dateiname &

                  Dann erkennst du das Problem sofort.

                  (> bedeutet, dass showkey seine Ausgaben in die Datei schreiben soll. Das tut es nicht.)

                  Fragen beantworte ich natürlich gerne, ansonsten bitte nur konstruktive Beiträge.

                  Nochmals vielen Dank.

                  Comment


                  • #10
                    Ich habe hier kein Linux und auch kein Ruby
                    Fragen beantworte ich natürlich gerne, ansonsten bitte nur konstruktive Beiträge.
                    Was war hier nicht konstruktiv? Du stellst hier 1 Zeile Ruby ins Forum und erwartest das jeder weiß um was es geht und was bei rauskommen soll?
                    Christian

                    Comment


                    • #11
                      Ein weiterer Versuch meinerseits:

                      (showkey</dev/tty5)>Dateiname &

                      funktioniert auch nicht, kommt aber der Sache vielleicht schon näher (wenigstens muss ich nicht neustarten).

                      Konkret wird zwar die Datei erstellt, die Tastatureingaben werden jedoch nicht eingelesen. Vielmehr scheint sich showkey sofort zu beenden ("caught signal 22, cleaning up").

                      Weiß jemand, woran das liegt und ob man showkey vielleicht dazu bewegen kann, im Hintergrund ebenso zu arbeiten wie ohne "&"?

                      Comment


                      • #12
                        Für alle, die es interessiert: Mir ist es gelungen, die keycodes ohne showkey im Hintergrund auszulesen.

                        Dieses Thema ist im Netz extrem dünn gesät und ich bin froh, dass ich nun endlich eine Lösung gefunden habe.

                        Hier der Ruby-Code:

                        Thread.new{
                        begin
                        stty_state=`stty -g`
                        `stty raw`
                        `stty -echo`
                        `kbd_mode -k`
                        loop{
                        print `tput nel`
                        keycode=`dd bs=1 count=1 2>/dev/null`
                        print "#{keycode.bytes[0]}"
                        }
                        ensure
                        `stty #{stty_state}`
                        `kbd_mode -a`
                        end
                        }
                        sleep 10


                        Der Rest ist nur noch Feinschliff...

                        Viele Grüße
                        benitager

                        Comment

                        Working...
                        X