Wie man Tastatur Zustand in Linux?
Möchte ich überprüfen, ob der Benutzer nach unten gedrückt, die SHIFT - Taste, wenn das Programm startet. (Das bedeutet, nach unten drücken, die SHIFT drücken, bevor das Programm gestartet) Es ist ein einfaches Konsolenprogramm, nichts mit Bezug zu X.
Diese vielleicht ähnlich zu Win32 GetKeyboardState()
Funktion.
Möchte ich wissen, ob ich dies tun kann und wie, aber nicht alle vor-und Nachteile mit Zugriff auf den terminal direkt.
- Welche Sprache verwenden Sie?
- C. _ _ _ _ _ _ _ _
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht.
Die shift-Taste ist nicht als ein Zeichen Schlüssel, so dass selbst wenn Sie Zugriff auf das terminal direkt, Sie werden nicht in der Lage, dies zu erkennen-Taste.
Vielleicht solltest du nicht zu haben. Stellen Sie sich zum Beispiel an, dass Sie mit einer US-Tastatur wo die zahlen stehen in der oberen Zeile ohne Modifikatoren, und auch die überprüfung für die shift-Taste. Menschen mit anderen Tastatur-layout verwenden, shift Modifier, die den Zugriff auf die zahlen. Wenn Ihr Programm darauf zu reagieren shift drücken, dann ist dein Programm ist im Grunde unbrauchbar. Das gleiche gilt für die anderen Sondertasten : Sie können erkennen, einige von Ihnen nur nach einem normalen Zeichen-Taste gedrückt wird. Oder schlimmer noch, Sie müssen möglicherweise verwenden Sie die Umschalt-Taste 'enter' um das Programm auszuführen.
Auch, was die shift-Taste zu tun, die Sie überwachen möchten ? der eine auf dem lokalen Rechner, oder auf die der Benutzer ? denken Sie daran, dass SSH vorhanden und wird Häufig verwendet, um den Zugriff auf ein pseudoterminal aus der Ferne.
Wenn du root bist, und überwachen möchten, die Taste Shift auf der lokalen Maschine ist, können Sie Lesen Sie die evdev-Geräte für Veranstaltungen über die shift-Taste. Dies ist aber nur möglich, weil der automatische Schlüssel zu wiederholen, so dass Sie nicht erkennen, eine shift-Taste, die gedrückt wird direkt vor der Ausführung Ihres Programms, sondern nur ein paar Sekunde, bevor.
Natürlich können Sie nicht tun, dass auf der remote-Maschine, das wäre eine Sicherheitslücke.
Und sowieso, warum sollte man das tun wollen ? wäre das nicht ein X-Programm sein, das richtige zu tun in deinem Fall ?
--conf
option, gut ist es zu wissen, ist unmöglich, ist genug, ich werde versuchen, es anderen Weg.Ich denke, es wäre ein Weg, dies zu tun. Die Sache ist, dass Sie zum Lesen direkt von der Tastatur-Gerät. Würden Sie nicht bekommen, die Eingabe vom terminal. Ich habe das gleiche problem. Ich habe ein Programm, das ausgeführt wird (im hintergrund) und ich möchte wissen, ob der Benutzer die Umschalttaste gedrückt halten.
Ich glaube, das ist möglich, und ein Ort, um zu starten könnte
/dev/input/by-path/*-kbd
.Diese Datei nicht geben-Eingang jedes mal, wenn eine Taste gedrückt wird oder reptadly, wenn er gedrückt wird, so könnte es einen Blick Wert sein. (Versuchen Sie, cat
/dev/input/by-path/*-kbd
)Wenn Sie dies herauszufinden, würde ich gerne hören, wie du es getan hast.
EDIT: ich habe die Lösung gefunden
Habe ich herausgefunden, wie kann Sie dies tun. Mein Programm ist wie folgt:
Die info-Meldung fehlt (ich bin zu faul). Aber im wesentlichen, das erste argument ist im Vergleich zu einer Liste der Schlüssel und die entsprechenden Schlüssel-id verwendet wird. Es gibt true zurück, wenn die Taste gedrückt wird, und false, wenn nicht.
Bitte Beachten Sie
Müssen Sie den Namen ändern Sie Tastatur-Gerät. Ich weiß nicht, einen Weg zu finden, die Standard-Tastatur-Gerät. (wenn Sie wissen, dass ich lieben würde, zu hören 😉 )
Das funktioniert wunderbar: ich benutze Sie zum starten der autostart-Eintrag in der Xorg wenn ich die Umschalttaste gedrückt halten.
platform-i8042-serio-0-event-kbd
hier, so vielleicht zumindest jeder PC hat es?). Durch ausführensudo xxd /dev/input/by-path/platform-i8042-serio-0-event-kbd
sah ich, dass die Datei "wächst" durch ein anderessizeof(keymap)
jedes mal, wenn die Tastatur der Zustand ändert.AFAIK kann dies nicht getan werden, ohne Xlib (aka. X) ohne root-Berechtigungen.
Mit XQueryKeymap() wird tun, was Sie wollen. aber Sie wies darauf hin, dass X nicht verwendet werden kann. Unabhängig davon, Eröffnungs-Bildschirm-Verbindung wird auch erforderlich sein.
Ich habe einen sehr einfachen Weg durch die gtk/gdk.