Konfiguration eines Keychron Keyboards zur Nutzung während des Bootens

xbit

Well-Known Member
Moin!

Ich habe mir ein Keychron Q3 Keyboard gekauft und hatte einige Probleme, das unter FreeBSD 13.3 (amd64) zur Benutzung zu bewegen. Das Hauptproblem bestand in der speziellen Systemkonfiguration. Da ich etwas Suchen und Ausprobieren musste, will ich die Konfiguration hier kurz zur Verfügung stellen, in der Hoffnung, das andere sich etwas Sucherei ersparen.

Mein Setup sieht so aus, dass ich 2 ZFS Pools habe. Platte 1 enthält einen ZFS Pool auf einer mit GELI verschlüsselten Partition. Der 2. Pool ist auf einer weiteren Platte, die ebenfalls mit GELI verschlüsselt ist. Beide verwenden unterschiedliche Keys, so dass ich vor und während des Bootens meine Passphrases eingeben muss. Das geht sicherlich auch anders und bequemer, ich habe aber nicht weiter geguckt, wie ich beide Platten mit den gleichen GELI Keys ausstatten kann.

Das Hauptproblem bestand nun darin, dass das Keyboard die Eingabe der ersten Passphrase ermöglichte und auch im Loader zur Verfügung stand. Während des Bootens und bevor die Services starten, wurde nun aber die zweite Passphrase abgefragt. Mit meiner vorherigen USB Tastatur war dies kein Problem. Die Keychron Tastatur war zu diesem Zeitpunkt aber deaktiviert, wurde aber vom Kernel erkannt und als
Code:
ukbd2
eingetragen. Trotzdem war sie zu diesem Zeitpunkt nicht nutzbar und ich konnte meine Passphrase nicht eingeben.

Ich weiss nicht, ob meine Schlussfolgerung korrekt ist, aber anscheinend war FreeBSD nicht in der Lage diese Tastatur für die Konsole zu nutzen.

Lösen liess das nun durch folgende Konfiguration in der
Code:
/boot/loader.conf
.

hw.usb.usbhid.enable=1
hw.usb.quirk.0="0x3434 0x0120 0 0xffff UQ_KBD_BOOTPROTO"

Die Konfiguration der Quirks ist etwas gewöhnungsbedürftig, aber gut dokumentiert. Im Wesentlichen geben die ersten beiden Werte das Gerät (Hersteller und Produkt) an und anschließend werden die Revision angegeben (hier alle). Zum Schluß wird für das Gerät das Boot Protokoll aktiviert.

Damit wird nun die Tastatur zuverlässig erkannt.
 
Hier ein paar kleine Updates.

  • OpenBSD 7.5 ist problemlos, das Keyboard funktioniert einfach. Es ist nichts weiter zu tun.
  • NetBSD konnte ich noch nicht testen, da der 10.0 Kernel segfaulted, wenn ich den Installer boote.
  • DragonflyBSD bootet den Installer, aber das Keyboard ist nur im Bootloader nutzbar, danach nicht mehr. Vermutlich sind hier ein paar Hints wie bei FreeBSD nötig.
  • FreeBSD 14 funktioniert mit den obigen Hints, hier waren bei dem Update keine Anpassungen notwendig. Nur die "Rollen" Taste konnte ich noch nicht zum Mitspielen bewegen, so dass ich in der Konsole nicht scrollen kann.

Mit QMK konnte ich bisher keine eigene Firmware bauen. FreeBSD hat zwar Pakete dafür, aber die Firmware hat Compilerfehler. Der avg-gcc in FreeBSD auch neuer als die Empfehlung, den alten GCC 8 zu nehmen.

Mit einem Linux in einer VM war ich allerdings auch nicht erfolgreich und hab daher immer noch die ursprüngliche Firmware von Keychron auf dem Keyboard.

Ansonsten bin ich mit dem Keyboard sehr zufrieden. Die Haptik ist gut, die Beleuchtung Geschmackssache und es ist schön klein. Allerdings habe ich inzwischen eine Handballenablage davor gestellt, weil das Keyboard doch relativ hoch ist und es sich so leichter tippen lässt. Sehr praktisch ist auch, dass man den USB-C Stecker am Keyboard ausstecken kann. Damit lässt sich das Keyboard auch bequem am Notebook, Tablet oder Handy nutzen.
 
Also ich bin seit ca. nem Jahr nun auch (sehr zufriedener) Keychron Nutzer und muss sagen: Ich hätte da garnicht daran gedacht, das es mit irgend einem System Probleme geben kann? Zum OS hin ist das ja ne normale Tastatur? Eventuell muss man das N-Key-Rollover auf 8-Key-Rollover umstellen, da es sonst noch nen Hub dazwischen "erfindet". War bei mir aber auch nie der Fall. Sowohl Win, als auch Linux als auch im Bios / Grub / Veracryptbootloader.

Wieso möchtest du eine eigene Firmware bauen? Was versprichst du dir davon? Ich war bisher immer sehr zufrieden mit den Möglichkeiten der usevia.app
 
Naja, ist wohl nur so halb ein "normales" Keyboard. Bei FreeBSD musste ich ja auch dafür sorgen, dass das via Bootprotocol angesprochen wird. Und anscheinend macht DragonflyBSD das -genau wie FreeBSD- nicht automatisch von Haus aus. Einzig OpenBSD spricht das direkt richtig an, ohne dass ich was konfigurieren musste.

Wieso möchtest du eine eigene Firmware bauen? Was versprichst du dir davon? Ich war bisher immer sehr zufrieden mit den Möglichkeiten der usevia.app
Wenn ich schon so ein Keyboard habe, wollte ich das mal austesten. Außerdem hab ich so ein paar Konfigurationen, die ich gerne immer hätte und es wäre sehr cool, wenn das im Keyboard behandelt werden würde. Beispielsweise könnte ich dann immer Control auf CapsLock liegen haben und via Compose Key Umlaute eingeben, auch bei Systemen, die das nicht von Haus aus können beziehungsweise ohne etwas zu konfigurieren.

Läuft die VIA App auf BSD? Ich dachte, die gibts nur für Windows, Mac und Linux? Und Linux hab ich hier nicht am Start. Und unter Windows hab ich da mal ausprobiert, konnte das aber auf anhieb nicht so konfigurieren, wie ich wollte.
 
Naja, ist wohl nur so halb ein "normales" Keyboard. Bei FreeBSD musste ich ja auch dafür sorgen, dass das via Bootprotocol angesprochen wird. Und anscheinend macht DragonflyBSD das -genau wie FreeBSD- nicht automatisch von Haus aus. Einzig OpenBSD spricht das direkt richtig an, ohne dass ich was konfigurieren musste.
Interessant, werd ich nochmal gucken und ev. am FreeBSD Server anschließen. Ich meine Linux hat mir normale USB Tastatur angezeigt.

Wenn ich schon so ein Keyboard habe, wollte ich das mal austesten. Außerdem hab ich so ein paar Konfigurationen, die ich gerne immer hätte und es wäre sehr cool, wenn das im Keyboard behandelt werden würde. Beispielsweise könnte ich dann immer Control auf CapsLock liegen haben und via Compose Key Umlaute eingeben, auch bei Systemen, die das nicht von Haus aus können beziehungsweise ohne etwas zu konfigurieren.

Läuft die VIA App auf BSD? Ich dachte, die gibts nur für Windows, Mac und Linux? Und Linux hab ich hier nicht am Start. Und unter Windows hab ich da mal ausprobiert, konnte das aber auf anhieb nicht so konfigurieren, wie ich wollte.

Also VIA läuft (u.a.) im Browser, aber du brauchst Chrome/Chromium (zumindest weiß ich, dass es im FF nicht funktioniert, wo es noch überall geht keine Ahnung). Einmal konfiguriert läuft das aber für alle Systeme, da die Tastatur ja transparent einfach die entsprechenden Keypresses sendet. Diese Configs kannst du auch als Backup speichern. Initial bräuchtest aber wohl eine VM mit zB Windows/Linux um das mal einzurichten.
 
FreeBSD hat das Keyboard auch als solches erkannt, aber es funktioniert nicht, wenn man während des Bootens ein GELI Volume mounten wollte und dazu die Passphrase eingeben musste. Das war das Hauptziel, was ich verfolgt habe. Deswegen waren auch diese Hints notwendig.

Via habe ich unter Windows mal probiert, aber war bisher nicht erfolgreich. Und Windows starte ich eher selten und bisher ging es so ja auch. Aber wenn ich schon ein Keyboard habe, das eine Custom Firmware erlaubt, dann will ich das auch mal ausprobieren. :)
 
FreeBSD hat das Keyboard auch als solches erkannt, aber es funktioniert nicht, wenn man während des Bootens ein GELI Volume mounten wollte und dazu die Passphrase eingeben musste. Das war das Hauptziel, was ich verfolgt habe. Deswegen waren auch diese Hints notwendig.

Eventuell von NKRO auf 8KRO umstellen - eigentlich braucht eh niemand NKRO - aber wenns jetzt passt ist es ja gut :)

Via habe ich unter Windows mal probiert, aber war bisher nicht erfolgreich. Und Windows starte ich eher selten und bisher ging es so ja auch. Aber wenn ich schon ein Keyboard habe, das eine Custom Firmware erlaubt, dann will ich das auch mal ausprobieren. :)

Natürlich :D
 
Aus Interesse und weil es sehr ungewöhnlich ist: Hast du mal versucht, die Optionen bezüglich USB im BIOS durchzuspielen? Da gibts oft sowas wie legacy peripherals an/aus/auto. Je nach Einstellung kann es das schon sein oder bringt weitere Einstellungen zum Vorschein.

An einem anderen Board klappts womöglich komplett ohne Gebastel, UEFI oder legacy (im Sinne Bootmodus) booten. Nur so als Idee, dass es so ohne Quirk klappen könnte.
 
Das Board ist schon etwas älter (von 2015). Das gibts einige wenige Optionen, die habe ich aber nicht alle durchgespielt. Aber ich kann das ja nochmal checken. Danke für den Hinweis.

UEFI bzw. BIOS Boot hab ich nicht explizit getestet. Aktuell nutze ich UEFI Boot.

Ich nehm das mal als Anregung, vielleicht findet sich ja eine Option, so dass die Hints nicht notwendig sind.
 
Das war damals mein eingebranntes Aha-Erlebnis, als man allmählich von PS/2 auf USB-Tastaturen wechselte.
Zum Glück konnte ich das passend mit der PS/2-Tastatur umstellen. Wäre die kaputt gewesen, wäre ich mit USB nichtmal ins BIOS gekommen.
Anekdotisches, warum man als ITler immer etwas Vorratshardware halten sollte. :D
 
Ja, eine 2. Tastatur, allerdings auch USB, habe ich. Die funktioniert auch und auch DragonflyBSD erkennt die problemlos.

Die Keychron funktioniert auch im BIOS, aber eben nicht, wenn DragonflyBSD gebootet ist. Aus meiner Sicht passiert da irgendwas bei der Initialisierung, was anders ist als bei den üblichen USB Keyboards.

im BIOS läßt sich nur folgendes umstellen:
  • EHCI Handoff on/off
  • XHCI Handoff of/off
  • Legacy Support Auto/Enabled/Disabled

Änderungen an den Werten haben nichts gebracht. Im Bootloader ist das Keyboard nutzbar, danach nicht mehr. Auch wenn ich die Hints von FreeBSD bei DragonflyBSD setze, ändert das nichts. Irgendwas muss das mit dem USB zu tun haben, denn auch die Beleuchtung läßt sich unter DragonflyBSD nach dem Booten nicht aktivieren.
 
Mysteriös.

Aus meiner Sicht passiert da irgendwas bei der Initialisierung, was anders ist als bei den üblichen USB Keyboards.
Jep. Wir hatten da einen ähnlichen Fall, da ging es um ein Touchpad.

Das Problem scheint daher zu kommen, ob und wie die Geräte erkannt und eingestuft werden. Nicht immer direkt als Eingabegerät. Vielleicht kannst du da Gemeinsamkeiten rauslesen.

im BIOS läßt sich nur folgendes umstellen:
  • EHCI Handoff on/off
  • XHCI Handoff of/off
  • Legacy Support Auto/Enabled/Disabled
Es wäre interessant ob sich Einstellungskombis auswirken bei der Erkennung später im System, Stichwort dmesgund usbconfig

Ich kenne von internen Geräten bei Laptops oft noch die Option, dass man einstellen kann, als was sie ans System rausgereicht werden. Bei Eingabegeräten kann das PS/2 oder USB sein und vllt. noch was.
Bei einer externen Tastatur wäre ein kleiner Schalter denkbar, ein Adapter zum Zwischenstecken oder ein Flag in der Firmware, das man mit Windows-Software setzen kann.

Auch hier wieder Nebelgestochere, aber mit einer zweiten Standardtastatur lässt es sich zumindest austesten. ;)
 
Eventuell von NKRO auf 8KRO umstellen - eigentlich braucht eh niemand NKRO - aber wenns jetzt passt ist es ja gut :)

Danke für den Hinweis. Nach ein wenig Geklicke in Via unter Windows habe ich anscheinend hier was verstellt? Nicht, dass ich irgendwie erkennen kann, wie der Zustand von NKRO ist. Jedenfalls funktioniert jetzt aktuell das Keyboard im DragonflyBSD Installer. Mal gucken, wie sich das morgen verhält, wenn der Rechner eine Weile stromlos war. :belehren:

Bei einer externen Tastatur wäre ein kleiner Schalter denkbar, ein Adapter zum Zwischenstecken oder ein Flag in der Firmware, das man mit Windows-Software setzen kann.
Das Keyboard hat einen Schalter, mit dem man zwischen Windows und Mac umschalten kann. Aktuell steht der immer auf Windows. Mit dem hab ich bisher nicht getestet.

Laut Kernelausgabe und dmesg wird das Keyboard sowohl als USB HID als auch als Keyboard (kbd2) erkannt. Das sah für mich unter FreeBSD insofern auch alles ok aus.

Aber nach den paar Tests heute und weil es aktuell nun tut, werde ich das mal ohne die Hints ausprobieren (und das 2. Keyboard zur Not daneben legen).

Auf jeden Fall erstmal danke für die ganzen Hinweise. Und es spricht mehr dafür, mit QMK eine Firmware zu bauen.
 
Danke für den Hinweis. Nach ein wenig Geklicke in Via unter Windows habe ich anscheinend hier was verstellt? Nicht, dass ich irgendwie erkennen kann, wie der Zustand von NKRO ist. Jedenfalls funktioniert jetzt aktuell das Keyboard im DragonflyBSD Installer. Mal gucken, wie sich das morgen verhält, wenn der Rechner eine Weile stromlos war. :belehren:

Kannst du sehr einfach testen, in dem du einfach mehr als 8 Tasten gleichzeitig drückst, und guckst ob die Anschläge noch alle ankommen ;) Braucht natürlich auch ein Programm was das irgendwie anzeigen kann. Sehr schön sieht man das auch im Keytester der VIA App. Aber ja, "schön" lässt sich der aktuelle Zustand leider nicht anzeigen.
 

Hier gibts vllt. noch was rauszulesen.

Edit:
Ist dieser USB-Port des Keyboards ein Kombigerät? Also zusätzlich noch ein USB-Stick, wo die Treiber drauf sind? Das war bei UMTS-Modems schon arg beknackt wo die Modi nicht gleichzeitig geschaltet waren, sondern eklig gewechselt werden mussten.
Das ließe sich definitiv mit anderer Firmware lösen und würde den Problemherd erklären.
 
Danke für eure Hinweise. Danach habeich die dmesgAusgabe nochmal gecheckt und das Keyboard meldet ein Keyboard, aber zwei USB HID Geräte. Vermutlich kommt es daher, da man auch die Maus damit steuern kann. Hier mal die Ausgaben.
Code:
ukbd0 on uhub0
ukbd0: <Keychron Keychron Q3, class 0/0, rev 2.00/1.03, addr 3> on usbus0
kbd2 at ukbd0

[...]

usbhid0 on uhub1
usbhid0: <Logitech Trackball, class 0/0, rev 1.10/2.20, addr 2> on usbus0
hidbus0: <HID bus> on usbhid0
usbhid1 on uhub0
usbhid1: <Keychron Keychron Q3, class 0/0, rev 2.00/1.03, addr 3> on usbus0
hidbus1: <HID bus> on usbhid1
usbhid2 on uhub0
usbhid2: <Keychron Keychron Q3, class 0/0, rev 2.00/1.03, addr 3> on usbus0
hidbus2: <HID bus> on usbhid2

[...]

hkbd0: <Keychron Keychron Q3 Keyboard> on hidbus2
kbd3 at hkbd0

Aber irgendwie scheint das Board, BIOS, ... sowieso nicht ganz korrekt zu arbeiten. Nachdem ich Windows gestartet und mit Via experimentiert habe (NKRO Toggle auf Fn+Space gelegt, was aber vermutlich nicht funktioniert), konnte FreeBSD nicht mehr korrekt die Onboard Realtek Netzwerkkarte nutzen. Und das Keyboard funktionierte mit dem DragonflyBSD Installer auch nicht mehr. Das Keyboard scheint irgendwie spezieller zu sein, aber das Board scheint auch seinen Beitrag zu leisten.

Unpraktischerweise habe ich bisher auch die QMK Firmware weder unter FreeBSD, noch OpenBSD, noch Linux bauen können.

Ich werde weiter experimentieren und hier Updates schreiben, wenn ich neue Erkenntnisse gewonnen habe.
 
Mhm, da wäre ein BIOS-Update des Boards noch eine gute Idee, sofern nicht bereits das letzte drauf ist.

Das Keyboard scheint irgendwie spezieller zu sein, aber das Board scheint auch seinen Beitrag zu leisten.
Ja, es verdichtet sich aber drauf, dass es zwei Geräte ausgibt. Das wird im BIOS, im Bootloader und später im durchgebooteten System anders angesprochen, der quirk nagelt das wahrscheinlich auf die TastaturID fest.

Hat die Tastatur eine Funktion, wo man der das mit der Maus abgewöhnen kann? Fn+irgendwas? Denkbar wäre auch, dass du im Boardbios beide Geräte siehst und darüber den Mauspart sperrst oder es exakt deswegen verwirrt ist, wenn es 2x Keychron Keychron Q3, class 0/0, rev 2.00/1.03 sieht.
Ziel sollte jedenfalls sein, sich die Firmware zu backen, damit man das steuern kann und z.B. den Mauspart gar nicht mitnimmt.
 
Ich weiss nicht, ob man das 2. USB Gerät abstellen kann, aber die Maussteuerung hatte ich mit Via konfiguriert. Ich werde mal testen, ob es nur ein Gerät meldet, wenn das aus ist.

BIOS Update scheidet aus, das ist schon das neueste. Mal schauen, ob ich das irgendwie mit einem 2. Mainboard eingrenzen kann.
 
Es verdichtet sich, dass es das Mainboard ist. Ich habe eben mal mein ThinkPad gestartet und da das Keyboard angeklemmt. Dort funktioniert es einwandfrei, auch wenn ich den DragonflyBSD Installer starte.

Bei meinem anderem Rechner funktioniert das Keychron Keyboard auch nicht, wenn ich ein normales Keyboard zusätzlich angeschlossen hatte. Insofern denke ich, dass der Test valide war. Muss wohl dann vielleicht doch mal upgraden.

Erstmal danke an alle für die Hinweise.
 
Es gäbe noch die kleine Chance, dass es an einer Buchse, die in einen anderen USB-Controller mündet, klappt. Wenn du schwarze und blaue Buchsen hast, sind die ziemlich sicher unterschiedlich verdrahtet.
Aber ja, ein anderes Mainboard dürfte die bessere Lösung sein.
Den Schalter auf Mac umstellen brachte auch nichts?
 
Zurück
Oben