USB-Tastatur und Linux

hekto

Member
Themenstarter
Registriert
22 März 2007
Beiträge
131
Hi,

Ich habe hier einen E-Book-Reader, der mit einem Linux (Kernel 2.6.35) läuft. Ich benutze den als Navigationsgerät zum Segelfliegen.
Für einen Festeinbau wäre eine "Fernbedienung" nett, üblich ist dazu eine USB-Tastatur.
USB-Host und den im Kernel eingebauten Tastaturtreiber habe ich soweit am Laufen, jedoch habe ich nur Daten von der Tastatur als eventX. Damit das Naviprogramm was damit anfangen kann, bräuchte ich die Tastatureingaben im Terminal.
Leider versteh ich nicht wirklich was von Linux (bin bloss Maschinenbauer ;-) ), deshalb würde es mir schon sehr weiterhelfen, wenn jemand Lust hätte, mir zu erklären, was überhaupt benötigt wird, um ein "TTY-Keyboard" zu bekommen.

Vielen Dank im Voraus,
Pascal
 
tty steht für teletype (Fernschreiber). Hast Du schon versucht ein normales USB-Keyboard anzuschliessen?
 
Hi,

Tut mir leid, wenn ich nicht die richtigen Begriffe verwende. Das Naviprogramm liest die normalen Tastatureingaben aus. Ich benutze eine Standard-USB-Tastatur. Sie wird offenbar korrekt erkannt und mit od -x /dev/input/event2 kann ich die Scancodes auslesen. Lediglich die Umwandlung in "Klartext" fehlt noch. Was wird denn dazu üblicherweise benötigt?

Gruß,
Pascal
 
USB Tastatur? Einstecken und läuft.

Wenn das nicht so ist, braucht man wie üblich Details. Welcher Reader mit welchem Linux kernel und welchen Treibern etc.
 
Hi,

Reader: Kobo Mini (mit einem Freescale i.MX50)
Kernel: 2.6.35
Kerneloptionen (alles im Kernel eingebaut):

# Input device support
CONFIG_INPUT=y
CONFIG_INPUT_POLLDEV=y
# Userland interfaces
CONFIG_INPUT_EVDEV=y
# Input Device Drivers
CONFIG_INPUT_KEYBOARD=y
# Console display driver support
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
# USB Input Devices
CONFIG_USB_HID=y
 
Es handelt sich um einen Micro-USB-Anschluss, ein Adapterkabel mit externer Stromversorgung und eine unveränderte Standard-USB-Tastatur.
Da sich die Scancodes auslesen lassen, ist es wohl kein Hardwareproblem.
 
Kannst du bitte noch ein paar mehr Infos liefern?

Was ist das für ein Navigationsprogramm?
Was für ein Linux (Distribution, falls überhaupt) läuft darauf und nach welchen Anleitungen bist du bisher vorgegangen?
Läuft da ein X-Server (falls ja, wie ist der konfiguriert - hast du eine xorg.conf)?
Falls ja, und od liefert schon Outputs, hast du xev zur Verfügung und kriegst dort ebenfalls Outputs?
 
Hi,

Das Naviprogramm heißt XCSoar
Eine komplette Linuxdistribution läuft darauf nicht.
Auch kein X-Server. xev steht nicht zur Verfügung.
Allgemein läuft auf dem Ding praktisch nichts (ist ja auch ein EReader und kein Tablet). Das sollte auch möglichst so bleiben. Eine Installation von Debian o.ä. kommt nicht in Frage.
Zugriff habe ich ausschließlich via telnet.
evtest läuft und ergibt untenstehende Ausgabe bei einmaligem Druck von "G".

Um die Tastatur zu nutzen habe ich lediglich geschaut, welche Kerneloptionen dazu nötig sein könnten und den kernel entsprechend neu gebaut. Ein Auszug der Optionen steht oben.


evtest ergibt (Taste G gedrückt):
Code:
Input driver version is 1.0.0
Input device ID: bus 0x3 vendor 0x4f2 product 0x116 version 0x110
Input device name: "CHICONY USB Keyboard"
Supported events:
  Event type 0 (EV_SYN)
Event type 1 (EV_KEY)

[...]

  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML)
    Event code 1 (LED_CAPSL)
    Event code 2 (LED_SCROLLL)
Properties:
  Property type 20 (EV_REP)
    Property code 0 (REP_DELAY)
      Value    250
    Property code 1 (REP_PERIOD)
      Value     33
Testing ... (interrupt to exit)
Event: time 1390383254.282405, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7000a
Event: time 1390383254.282461, type 1 (EV_KEY), code 34 (KEY_G), value 1
Event: time 1390383254.282480, -------------- SYN_REPORT ------------
Event: time 1390383254.402351, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7000a
Event: time 1390383254.402388, type 1 (EV_KEY), code 34 (KEY_G), value 0
Event: time 1390383254.402402, -------------- SYN_REPORT ------------

Gruß,
Pascal
 
Ich habe mal ein wenig gestöbert, mir den Kobo-Installer [1] sowie die Installationsanweisungen [2] angeschaut und auch die Debianpakete [3][4]. Den Abhängigkeiten der Pakete zufolge ist XCSoar ein ganz gewöhnliches X-Programm und würde hier auch ganz normal über den X-Server an die Tastatur kommen.
Beim Kobo-Installer sieht das anders aus. Wenn ich das richtig gesehen habe ist XCSoar hier eine alternative Bootoption. Der Installer gibt leider keinen Aufschluss darüber, wie das Programm intern arbeitet. D.h. du magst zwar eine funktionierende Tastatur haben und auch ein Programm das prinzipiell Tastatureingaben verarbeiten kann, aber die Verbindung dazwischen fehlt wohl. Auf die Schnelle kann ich nicht erkennen wie das zu lösen wäre. Vielleicht gibt das Git dazu etwas her, aber das ist mir so ganz ohne Anhaltspunkte momentan zu aufwändig. Ich vermute der Kobo-Installer müsste für USB-Tastaturen angepasst werden.

Ich denke deine beste Chance besteht darin, direkt im XCSoar-Forum nach Tastaturunterstützung für die Koboversion zu fragen.


[1] http://download.xcsoar.org/releases/6.7.2/KOBO/KoboRoot.tgz
[2] http://max.kellermann.name/projects/xcsoar/kobo.html
[3] http://download.xcsoar.org/releases/6.7.2/LINUX/
[4] http://download.xcsoar.org/releases/6.7.2/CUBIE/
[5] http://forum.xcsoar.org/
 
Zuletzt bearbeitet:
Hi,

Ich habs gerade eben zum Laufen gebracht. Allerdings mit einem anderen Ansatz, nämlich das Naviprogramm geändert, welches die Tastatur nun auf "Eventebene" nutzt. Insofern hat sich das Thema praktisch erledigt.
Ich frag mich aber trotzdem, woran es hakt. Was sorgt dafür, dass aus Keycodes die Tasten (Keysyms) werden? Läuft das alles auf Kernelebene, oder was ist dazu nötig?

Darstellung des Input Subsystems:
http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/063/6396/6396f1.jpg

So oder so, herzlichen Dank für eure Bemühungen.

Gruß,
Pascal
 
Zuletzt bearbeitet:
Ich habs gerade eben zum Laufen gebracht. Allerdings mit einem anderen Ansatz, nämlich das Naviprogramm geändert, welches die Tastatur nun auf "Eventebene" nutzt.
Mich würde interessieren wie du das im Detail angestellt hast.
XCSoar auf dem Kobo ist aus meiner Perspektive eine Black Box. Was hat du geändert um das Program auf die Tastaturevents reagieren zu lassen?

Ich frag mich aber trotzdem, woran es hakt. Was sorgt dafür, dass aus Keycodes die Tasten (Keysyms) werden? Läuft das alles auf Kernelebene, oder was ist dazu nötig?
Dazu gibt es einen schönen Artikel im Wiki von Arch:
https://wiki.archlinux.de/title/Xmodmap
 
Mich würde interessieren wie du das im Detail angestellt hast.
XCSoar auf dem Kobo ist aus meiner Perspektive eine Black Box. Was hat du geändert um das Program auf die Tastaturevents reagieren zu lassen?

Verantwortlich für die Eingaben sind offenbar die Dateien /src/Event/Console/Queue.hpp und .cpp

Queue.hpp (Original):
Code:
#ifdef KOBO
  LinuxInputDevice keyboard;
  LinuxInputDevice mouse;
  RotatePointer rotate_mouse;
#else
  TTYKeyboard keyboard;
  LinuxMouse mouse;
#endif
Hätte ich das TTY-Keyboard verwenden wollen, wäre hier ohnehin eine Änderung nötig gewesen. Habe hier jetzt nichts geändert.

Queue.cpp (Original):
Code:
#ifdef KOBO
  /* power button */
  keyboard.Open("/dev/input/event0");

  /* Kobo touch screen */
  mouse.Open("/dev/input/event1");
#else
  mouse.Open();
#endif
Hier habe ich nun als Keyboard /dev/input/event2 geöffnet, das ist (natürlich nur in diesem spezielle Fall) meine USB-Tastatur. Ursprünglich, mit event0, wurde der Powerbutton verwendet.

Solche Änderungen sind natürlich nur für Spezialfälle verwendbar, aber die ganze Sache wird ohnehin wohl vorerst nicht in XCSoar aufgenommen. Der Kobo unterstützt nämlich USB-Host nur mit einem geändertem Kernel und dann funktioniert USB-Device (also der Anschluss an den PC als Massenspeicher) nicht mehr. Für mich persönlich aber egal. Mehr als diese Bastelei hab ich einfach nicht drauf. :facepalm:


Dazu gibt es einen schönen Artikel im Wiki von Arch:
https://wiki.archlinux.de/title/Xmodmap

Ich frag mich halt, ob das nicht auch ohne ein X oder sonstiges Zusatzgedöns geht.
Ist aber jetzt nicht mehr so wichtig und ich hoffe in Zukunft nicht mehr in solche Tiefen eintauchen zu müssen. Die Tastatur war sozusagen die letzte Funktion, die zu meinem perfekten Navi gefehlt hat.
 
[..]
Hier habe ich nun als Keyboard /dev/input/event2 geöffnet, das ist (natürlich nur in diesem spezielle Fall) meine USB-Tastatur. Ursprünglich, mit event0, wurde der Powerbutton verwendet.
Danke! Genau das wollte ich wissen.

Solche Änderungen sind natürlich nur für Spezialfälle verwendbar, aber die ganze Sache wird ohnehin wohl vorerst nicht in XCSoar aufgenommen. Der Kobo unterstützt nämlich USB-Host nur mit einem geändertem Kernel und dann funktioniert USB-Device (also der Anschluss an den PC als Massenspeicher) nicht mehr.
Man müsste dazu nur je nach Anwendungsfall den USB-Port zwischen Host-Mode und OTG umschalten. Dass das prinzipiell geht weiß ich weil ich ein Nokia N900 habe für das es eine App gibt die genau das macht [1] bzw. dem User ein GUI gibt um den Kernel dazu anzuweisen. Für die Details habe ich mich bisher nicht interessiert.

Ich frag mich halt, ob das nicht auch ohne ein X oder sonstiges Zusatzgedöns geht.
Ich habe mich unterhalb von X damit bisher nicht beschäftigt, aber auf die Schnelle habe ich gefunden, dass dafür offenbar die Funktion codetoksym aus ksyms.c des Kernels [2] verantwortlich ist. Die liest Kernel-Keymaps ein und ermittelt mit deren Hilfe dann aus den Keycodes Keysyms. Wo die Keymaps hekommen kann ich nicht sagen, das scheint nicht einheitlich zu sein.


[1] http://wiki.maemo.org/N900_Hardware_USB_Host
[2] https://kernel.googlesource.com/pub/scm/linux/kernel/git/legion/kbd/+/loadkeys/src/libkeymap/ksyms.c
 
Ich werd mal loadkeys ausprobieren.
Host/Device Umschaltung ist gerüchteweise in Arbeit, aber ich habe noch nichts davon gesehen.
Das Problem bei der ganzen USB-Host Geschichte ist ja auch, dass der Kobo keine 5V liefern kann, also auf jeden Fall eine externe Stromversorgung benötigt wird. Damit kommt das für den mobilen Einsatz nicht in Frage.
 
Hi,

loadkeys lief leider nicht auf Anhieb. Da das Problem gelöst ist, werde die Tastaturgeschichte nicht weiter untersuchen. Vielen Dank für eure Hilfe.

Gruß,
Pascal
 
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben