Aaaaarrrrggghhh! Varför ska jag behöva grotta med varenda liten detalj för att få saker som är självklara att fungera så som de borde?
Ta bara ett sånt litet exempel som tangentbordslayout. Visst, det finns X antal tangentbordstyper med Y antal tangenter och Z antal tecken. Men det är inte raketforskning vi pratar om, och de flesta tangentbordslayouten är väl kända sen 70-talet kallt.
Varför ska det då vara så in i h-e svårt att få till svenska tangenter i Linux? Visst, kommandot ”loadkeys sv-latin1” laddar en ypperligt svensk tangentbordslayout som funkar via Telnet, terminal, etc. MEN försök bara att få våra kära AltGr kombinationer (t.ex. snabel-a som ju fås fram med AltGr+2) att funka i en VNC session så ska du få se på problem! Beroende på vilken VNC klient man har så får man olika resultat, alla dock helt fel 😦
Jag har vänt ut-och-in på Internet m.h.a. Google utan att hitta ett vettigt fungerande svar. NATURLIGTVIS så blir lösningen att man får grotta ner sig i ett antal mer eller mindre korrekta artiklar från nätet och i bästa Dr. Frankenstein anda koka ihop en egen soppa och hoppas att det funkar.
Såhär kan man sammanfatta mina erfarenheter hittills:
- OVMM (som ju används via browsern) har en egen Javabaserad VNC klient inbyggd, denna klarar *definitivt inte* av att skapa backslash, pipe, tilde eller snabel-a utan att man skapar en egen tangentbordsmappning
- Använder man RealVNC’s windowsklient så funkar *inga* AltGr kombinationer alls, oavsett vilken tangentbordslayout man skapar / laddar
- Ansluter man via Telnet så funkar allt klockrent
Jag kan alltså inte få till en vettig, helt 100% fungerande lösning om man vill ansluta sig till en terminal via VNC. Att skapa en egen tangentbordsmappning är iofs inte så svårt, men VARFÖR ska man ö.h.t. behöva hålla på med dessa basala saker som borde ha rätats ut för typ tio år sen?
Dessutom så löser det inte hela problemet eftersom den Javabaserade VNC klient som ligger med i OVMM av någon anledning lägger sig i saker, och helt enkelt ”äter upp” vissa tangentkombinationer för att istället utföra andra saker. Det var på detta sätt jag lärde mig att det finns något som heter ”QEMU Monitor” när jag ville skapa ett snabel-a och tryckte på AltGr och 2. Mindre lustigt är att kommer man väl dit så går det inte att ta sig därifrån även om det enligt dokumentationen bara ska vara att trycka på AltGr och 1, det enda sätt jag hittade var att skriva ”quit” varvid hela VM:et bootade om. Styggt! 😦
För att slippa ur detta h:e så stängde jag helt enkelt VNC kopplingen i OVMM och anslöt via RealVNC:s Windowsklient, väl där så kan man trycka på Ctrl, Alt och 1 samtidigt för att slippa ur QEMU Monitor. QEMU Monitor ska enligt alla dokument jag hittade vara avstängd per default i Xen numera p.g.a. att den är en säkerhetslucka iochmed att den som hittar dit kan typ byta media eller boota om VM:et. Men tydligen så är den fortfarande aktiv i OVM 😦
Nåja, för att skapa en ny tangentbordsmappning så är det enklast att utgå från en kopia av filen /lib/kbd/keymaps/i386/qwerty/sv-latin1.map.gz. Kopiera och packa upp denna fil:
# cp sv-latin1.map.gz sv-vnc.map.gz
# gzip -d sv-vnc.map.gz
Redigera den uppackade filen så att control alt kombinationerna beskrivs på egna rader istället för enbart som kolumner i filen. Min fil blev såhär (nya rader markerade, resten orörda):
charset ”iso-8859-1”keymaps 0-2,4-6,8,12include ”qwerty-layout”include ”linux-with-alt-and-altgr”plain keycode 83 = KP_Commastrings as usualkeycode 1 = Escapealt keycode 1 = Meta_Escapekeycode 2 = one exclamalt keycode 2 = Meta_onekeycode 3 = two quotedbl atcontrol keycode 3 = nulalt keycode 3 = Meta_twocontrol altgr keycode 3 = atkeycode 4 = three numbersign sterlingcontrol keycode 4 = Escapealt keycode 4 = Meta_threecontrol altgr keycode 4 = sterlingkeycode 5 = four ccedillacontrol keycode 5 = Control_backslashalt keycode 5 = Meta_fouraltgr keycode 5 = dollarcontrol altgr keycode 5 = dollarkeycode 6 = five percentcontrol keycode 6 = Control_bracketrightalt keycode 6 = Meta_fivekeycode 7 = six ampersand notsigncontrol keycode 7 = Control_asciicircumalt keycode 7 = Meta_sixkeycode 8 = seven slash braceleftcontrol keycode 8 = Control_underscorealt keycode 8 = Meta_sevencontrol altgr keycode 8 = braceleftkeycode 9 = eight parenleft bracketleftcontrol keycode 9 = Deletealt keycode 9 = Meta_eightcontrol altgr keycode 9 = bracketleftkeycode 10 = nine parenright bracketrightalt keycode 10 = Meta_ninecontrol altgr keycode 10 = bracketrightkeycode 11 = zero equal bracerightalt keycode 11 = Meta_zerocontrol altgr keycode 11 = bracerightkeycode 12 = plus question backslashcontrol keycode 12 = Control_underscorealt keycode 12 = Meta_minuscontrol altgr keycode 12 = backslashkeycode 13 = dead_acute dead_gravealt keycode 13 = Meta_equalkeycode 14 = Deletealt keycode 14 = Meta_Deletekeycode 15 = Tabalt keycode 15 = Meta_Tabkeycode 26 = +aring +Aringcontrol keycode 26 = Escapealt keycode 26 = Meta_bracketleftkeycode 27 = dead_diaeresis asciicircum asciitildecontrol keycode 27 = Control_bracketrightalt keycode 27 = Meta_bracketrightcontrol altgr keycode 27 = asciitildekeycode 28 = Returnalt keycode 28 = Meta_Control_mkeycode 29 = Controlkeycode 39 = +odiaeresis +Odiaeresisalt keycode 39 = Meta_semicolonkeycode 40 = +adiaeresis +Adiaeresiscontrol keycode 40 = Control_galt keycode 40 = Meta_apostrophekeycode 41 = section degree onehalfcontrol keycode 41 = nulalt keycode 41 = Meta_gravekeycode 42 = Shiftkeycode 43 = apostrophe asteriskcontrol keycode 43 = Control_backslashalt keycode 43 = Meta_backslashkeycode 51 = comma semicolonalt keycode 51 = Meta_commakeycode 52 = period colonalt keycode 52 = Meta_periodkeycode 53 = minus underscorecontrol keycode 53 = Deletealt keycode 53 = Meta_slashshift control keycode 53 = Control_underscorekeycode 54 = Shiftkeycode 56 = Altkeycode 57 = spacecontrol keycode 57 = nulalt keycode 57 = Meta_spacekeycode 58 = Caps_Lockkeycode 86 = less greater baralt keycode 86 = Meta_lesscontrol altgr keycode 86 = barkeycode 97 = Control
Sen är det bara att komprimera filen igen och att ladda den:
# gzip sv-vnc.map
# loadkeys sv-vnc
Tyvärr så funkar endast pipe och backslash, de andra som ligger på tangenterna 2-4 och 7-9 samt tilde ”äts” som sagts upp av OVMM:s Javabaserade VNC klient. Och RealVNC:s windowsklient vägrar ö.h.t. att befatta sig med AltGr oavsett hur fina tangentbordsmappningar man gör . 😦
Kommandot loadkeys har även en shell-mode där man kan on-the-fly modifiera tangenttryckningar, den kan fås att utföra en massa saker som man (inte) behöver. Eller så kan man mata den med vad man vill ska utföras vid tangenttryck:
# echo ‘ctrl alt keycode 12 = backslash’ | loadkeys
Detta ger en backslash vid samtidigt tryck på vänstra Ctrl, vänstra Alt och plustangenterna. Helt enkelt samma sak som AltGr och plustangenterna eftersom vänstra Alt och vänstra Ctrl mappas som AltGr 🙂
Vill man leka med tangenter och vilka dessa keycodes är så är kommandot showkey ganska kul:
# showkey
Låter man bli att trycka på en tangent i typ 10 sekunder så avslutas den automagiskt.
Nu är det lämpligt att VM:et laddar den nya mappningen automagiskt vid varje boot, och det är inte så svårt att fixa till, det är bara att ange detn nya mappningen i filen /etc/sysconfig/keyboard. Det räcker med att filen innehåller följande rader:
KEYBOARDTYPE=”pc”
KEYTABLE=”sv-vnc”
J:a, j:a, j:a skit att man ska behöva hålla på såhär! Efter mina 25 år i branschen så är jag tillbaka där allt började: en j:a massa grottande i obskyra konfigurationsfiler vid en blinkande prompt 😦