Neo2-Tastaturlayout in VirtualBox verfügbar machen

  • strict warning: Non-static method view::load() should not be called statically in /usr/share/nginx/www/drupal/sites/all/modules/views/views.module on line 1113.
  • strict warning: Declaration of views_handler_field::query() should be compatible with views_handler::query($group_by = false) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_field.inc on line 0.
  • strict warning: Declaration of views_handler_field_user::init() should be compatible with views_handler_field::init(&$view, $options) in /usr/share/nginx/www/drupal/sites/all/modules/views/modules/user/views_handler_field_user.inc on line 0.
  • strict warning: Declaration of views_handler_argument::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_argument.inc on line 0.
  • strict warning: Declaration of views_handler_argument::query() should be compatible with views_handler::query($group_by = false) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_argument.inc on line 0.
  • strict warning: Declaration of views_handler_sort::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_sort.inc on line 0.
  • strict warning: Declaration of views_handler_sort::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_sort.inc on line 0.
  • strict warning: Declaration of views_handler_sort::query() should be compatible with views_handler::query($group_by = false) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_sort.inc on line 0.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_filter.inc on line 0.
  • strict warning: Declaration of views_handler_filter::query() should be compatible with views_handler::query($group_by = false) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_filter.inc on line 0.
  • strict warning: Declaration of views_handler_relationship::query() should be compatible with views_handler::query($group_by = false) in /usr/share/nginx/www/drupal/sites/all/modules/views/handlers/views_handler_relationship.inc on line 0.
  • strict warning: Declaration of views_plugin_query::options_submit() should be compatible with views_plugin::options_submit($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/plugins/views_plugin_query.inc on line 0.
  • strict warning: Declaration of views_plugin_argument_validate::options_submit() should be compatible with views_plugin::options_submit($form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/plugins/views_plugin_argument_validate.inc on line 0.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /usr/share/nginx/www/drupal/sites/all/modules/views/plugins/views_plugin_row.inc on line 0.

Hin und wieder lässt es sich nicht vermeiden: Ich muss manche Dinge innerhelb von Windows bewerkstelligen. Dazu zählt beispielsweise das Programmieren von Anwendungen für Windows Mobile. Um das machen zu können, nutze ich die Open-Source Version von VirtualBox und lasse einen Windows Vista Gast auf meinem Ubuntu 9.10 Wirt laufen. So weit so gut, fast alles klappt reibungslos.

Problem

Vor einiger Zeit änderte ich mein Tastaturlayout auf Neo2 und entdecke immer wieder angenehme Feinheiten die sich durch dessen Verwendung ergeben. Leider ist Neo2 in meinem Gast-Vista standardmäßig kaum nutzbar. Die Probleme sind auch im Neo2-Wiki sowie im VirtulBox-Bugtracker bekannt und stellen sich folgendermaßen dar:

  1. Die Zahlenreihe funtioniert nicht
  2. Buchstabenverschiebungen: "-" ist "p", "q" ist "-", "p" ist "q", ...
  3. Modifikator 3 und aufwärts funktioniert nicht (damit keine Sonderzeichen)
  4. Numpad geht nicht

Leider ist es mir bisher nicht gelungen, alle Probleme zu lösen. Punkte eins und zwei lassen sich aber beheben.

In einem weiteren VirtualBox-Ticket wird auf das Problem eingegangen und ein (mittlerweile im SVN verfügbarer) Patch vorgestellt. Damit ist es möglich ein Remapping der Tasten, die VirtualBox empfängt auf die Tasten die es zum Gast sendet, vorzunehmen.

Remapping

VirtualBox bringt neben der GUI auch noch ein Kommandozeilenprogramm „VBoxManage“ mit sich. Dieses stellt deutlich mehr Optionon zur Verfügung, als wie das graphische Verwaltungswerzeug. Wie in einem anderen Blog erklärt, lässt sich damit z. B. die maximale Bildschirmauflösung festlegen. Und eben auch für das Remapping gibt es Möglichkeiten. Nach meiner Installation war die Anwendung nicht direkt verlinkt, sie war aber im Ordner „/usr/local/virtualbox“ zu finden.

Eben jenes Programm ruft man nun nach folgendem Muster auf:

VBoxManage setextradata global GUI/RemapScancode keycode=scancode, keycode=scancode, ...

VirtalBox reagiert auf gedrückte Tasten indem es sie an den Gast weiterleitet. Genauer empfängt es (in Linux) von X sog. Keycodes, eine Abstraktion von dem was wirklich von der Tastatur gesendet wird. Die virtuelle Maschine erwartet nun aber keine Abstraktion sondern etwas das auch von einer echten Tastatur kommen könnte. Das sind dann die sog. Scancodes. Näheres dazu kann man auch nochmal hier durchlesen.

Offensichlich klappt nun das von VirtualBox vorgeschlagene Mapping nicht mit allen Tasten des Neo2-Layouts, das soll (zumindest zum Teil) korrigiert werden. Dazu benötigt man also die Scan- und Keycodes entsprechender Tasten. Letztere findet man sehr einfach mit dem Programm „xev“ heraus:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Der Ausdruck filtert dabei noch etwas und beim Drücken der Taste „1“ wird folgende Ausgabe geliefert:
10 1

Das heißt nichts anderes, als dass der Keycode der Taste „1“ die „10” ist. Um nun den Scancode einer Taste festzustellen, muss man sich auf eine „echte“ Konsole begeben. Dazu am einfachsten Strg+Alt+F1 drücken, einloggen und das Programm „showkey“ benutzen. Dieses zeigt die Scancodes der gedrückten Taste an und beenet sich nach 10 Sekunden ohne Eingabe von selbst:
showkey -s

Drückt man hier ebenfalls die Taste „1“ führt das zu einer hexadezimalen Ausgabe des Scancodes (evtl. umgebrochen):
0x02 0x82

Erster Wert steht für das Drücken, zweiter für das Loslassen (glaube ich zumindest). VBoxManage erwartet beides, Scancode wie Keycode, in Dezimaldarstellung. Entweder man macht das im Kopf (gute Übung) oder nutzt eines der vielen kleinen Werzeuge wie von SelfHTML.

Für ein korrektes Mapping der Taste „1“ müssen wir nun folgenden Aufruf tätigen:

VBoxManage setextradata global GUI/RemapScancodes 10=2

Aber Achtung: Die Einstellungen werden erst durch ein erneutes Laden (nicht notwendigerweise Neustarten) der VM nutzbar. Gestartet werden kann eine VM übrigens auch mittels VBoxManage:
VBoxManage startvm "<VM_Name>"

Auch ist es nicht möglich mehrere Remappings separat durch mehrere VBoxManage-Aufrufe zu verwenden. Benötigt man mehrere Remappings ist das in einem Aufruf zu erledigen. Hier exemplarisch für alle zehn Zahlentasten:
VBoxManage setextradata global GUI/RemapScancodes 10=2,11=3,12=4,13=5,14=6,15=7,16=8,17=9,18=10,19=11

Da es mehrere Tasten gibt die nicht funktionieren, habe ich eine Liste mit Namen, Scan- und Keycodes erstellt, welche den Großteil meiner Tastatur abdeckt. Hier ist sie zu finden. Da ich mir nicht sicher war, ob dar Scancode für das Drücken oder das Loslassen relevant ist, habe icn beide Versionen probiert.

Erst das Drücken...:

VBoxManage setextradata global GUI/RemapScancodes 49=41,10=2,11=3,12=4,13=5,14=6,15=7,16=8,17=9,18=10,19=11,20=12,21=13,22=14,23=15,24=16,25=17,26=18,27=19,28=20,29=21,30=22,31=23,32=24,33=25,34=26,35=27,36=28,66=58,38=30,39=31,40=32,41=33,42=34,43=35,44=36,45=37,46=38,47=39,48=40,51=43,50=42,94=86,52=44,53=45,54=46,55=47,56=48,57=49,58=50,59=51,60=52,61=53,62=54,37=29,133=91,64=56,65=57,108=56,134=92,135=93,105=29,77=69,106=53,63=55,82=74,79=71,80=72,81=73,86=78,83=75,84=76,85=77,87=79,88=80,89=81,104=28,90=82,91=83,9=1

...dann das Loslassen:
VBoxManage setextradata global GUI/RemapScancodes 49=169,10=130,11=131,12=132,13=133,14=134,15=135,16=136,17=137,18=138,19=139,20=140,21=141,22=142,23=143,24=144,25=145,26=146,27=147,28=148,29=149,30=150,31=151,32=152,33=153,34=154,35=155,36=156,66=186,38=158,39=159,40=160,41=161,42=162,43=163,44=164,45=165,46=166,47=167,48=168,51=171,50=170,94=214,52=172,53=173,54=174,55=175,56=176,57=177,58=178,59=179,60=180,61=181,62=182,37=157,133=219,64=184,65=185,108=,77=179,63=183,82=184,79=181,80=182,81=183,86=188,83=185,84=186,85=187,87=189,88=190,89=191,90=192,91=193,9=129

Das sind eine ganze Menge Zahlen und sicher sind einige überflüssig, aber sicher ist sicher :-).

Hinweis: Sollte nach einem Remapping VirtualBox den Dienst mit einem Segmentation-Fault verweigern, stimmt mit dem Remapping etwas nicht.

Alles geschafft?

Leider hat der ganze Aufwand noch nicht alle Probleme beseitigen können. Punkte eins und zwei sind damit zwar vom Tisch, aber alles ab Modifikator drei aufwärts geht noch nicht. Eine interessante Beobachtung ist aber die, dass der Keycode für Mod 3 (ehemals Caps-Lock) kurzzeitig ankommt aber dann wieder überschrieben wird: In Windows kommt man an die notwendigen Informationen ja nicht so ohne Weiteres ran und durch Zufall stieß ich auf eine Seite die ein Tool Namens „keyview” verlinkte. Damit ist es möglich die Scancodes zu sehen und beim ersten Druck auf Mod 3 kommt auch das richtige an. Danach leider immer der falsche (Alt links) Scancode. Woran das liegt finde ich aber sicher noch raus :-).

Eine weitere Baustelle ist der Numblock. Das sollte aber recht einfach zu lösen sein: Die richtigen Scancodes kommen an und ich muss vermutlich nur noch rausbekommen wie ich den Nummernblock mit Neo2 aktiviere :-P.

SVN-Version

Sollte diese Funktionalität noch nicht in der vorkompilierten Version verfügbar sein, muss man sich die aktuelle SVN-Version holen und kompilieren. Es hat sich als vorteilhaft herausgestellt, das kompilieren, sowie die Istallation als root durchzuführen. Wie das am besten geht, steht auf der VirtulBox-Homepage. Auch gibt es auf HowTo-Forge eina sehr hilfreiche Anleitung.

Mögliche Fehler:

  • „Effective UID is not root (euid=1000 egid=100 uid=1000 gid=100) (rc=-10)“: Wie in einem Forumseintrag bei VirtualBox erlärt, hilft da Folgendes: chmod 4711 /usr/local/virtualbox/VirtualBox
  • Bereits installierte VMs werden nicht angezeigt: Sicherstellen, dass man die Anwendung als der Benutzer ausführt, in dessen Homeverzeichnis die Maschinen liegen.
  • „NS_ERROR_FAILURE (0x80004005)“ bzw. „RTR3Init failed with rc=-1912 (rc=-1912)“: Da half leider nur Neukompilieren und Neuinstallieren
  • Die Modulkompilierung geht schief: Auch hierzu gab es brauchbare Hinweise im VirtualBox-Forum

Update: Ein paar Rechtschreibfehler entfernt (alle hab ich sicherlich noch nicht gefunden :-) ).

Hin und wieder lässt es sich nicht vermeiden: Ich muss manche Dinge innerhelb von Windows bewerkstelligen. Dazu zählt beispielsweise das Programmieren von Anwendungen für Windows Mobile. Um das machen zu können, nutze ich die Open-Source Version von VirtualBox und lasse einen Windows Vista Gast auf meinem Ubuntu 9.10 Wirt laufen. So weit so gut, fast alles klappt reibungslos.Problem

Trackback URL for this post:

https://blog.voodoo-arts.net/trackback/50
Status

Moin,
ich bin auf dem selben „Weg“ (neo + VBox)...
Mich stört (gerade mal wieder), dass die Ebenen ab 3. Ebene im Gast nicht verfügbar sind.
Hast Du schon neue Ideen ??

Nils

Submitted by Nils (not verified) on Sun, 2010-05-30 17:43.
Re: Status

Hi,

sorry für die späte Antwort - offensichtlich muss ich da noch ein System finden über Kommentare benachichtigt zu werden.

Leider habe ich noch keine Ideen dafür Ebene > 3 zu aktivieren. Zeit dafür habe ich mir allerdings auch noch nicht wieder genommen. Bist du da mittlerweile weiter gekommen?

Tom

Submitted by tom on Sun, 2010-07-11 20:25.

Tags for Neo2-Tastaturlayout in VirtualBox verfügbar machen