Het begon met een simpele vraag: 'Miek, kun je zorgen dat e accent karakters enzo het gaan doen onder X?'
Dit is voor ons project bij het Octrooi Centrum Nederland waar we een Open Source Desktop aan het implementeren zijn. Nu zijn er nog wat andere zaken die eea wat meer ingewikkeld maken:
- we gebruiken thin clients en dus XDMCP;
- de omgeving is XFCE. Geen GNOME of KDE vanwege de snelheid en hun geheugen gebruik;
- De xfce-keyboard-switcher die we hier hebben (4.4) crasht tijdens het gebruik;
- Ik heb een voorkeur om het via de commandline te kunnen scripten.
Theorie
Het gaat wat ver om de gehele theorie achter de toetsenbord settings in X uit te leggen, zelf begrijp ik het ook niet voor 100%. Maar in X heb je:
- een toetsenbord model: model
- een layout: layout; op welke toetsen horen welke karakters
- een variant: variant; dode toetsen (= alt+e, geeft e accent)
Al deze zaken kun je in GNOME, KDE en ook XFCE zetten via een grafische
client. Maar deze tools kunnen onverwacht stuk gaan zodra je XDMCP gaat
gebruiken. De lowlevel tool zou setxkbmap moeten zijn.
Hoe het zou moeten werken?
Via de commandline zou het volgende iets moeten doen:
% setxkbmap
Met een lokaal draaiende X server gaat het waarschijnlijk goed. Draai je XDMCP (thin clients) dan kom je hier niet mee weg. De behulpzame melding die je krijg als het niet werkt is:
% setxkbmap
Error loading new keyboard description
En dat was het dan. Het volgende zou dan moeten wel werken:
% setxkbmap -print | xkbcomp - $DISPLAY
Dit werkt inderdaad, er zijn geen errors, maar het heeft ook weinig effect...
Omdat dit toch op een of andere manier zou moeten gaan werken, ben ik eens
naar gnome-control-center gaan kijken, ondanks dat we werken met
XFCE. Als je gnome-control-center start en dan twee keer naar keyboard
settings gaat dan wordt de gnome-settings-daemon gestart en verrek,
setxkbmap print de juiste info en mijn toetsenbord werkt.
Helaas
¨verziekt" gnome-settings-daemon de achtergrond van XFCE waardoor
de desktop icons niet meer zichtbaar zijn. Dus dit is geen permanente
oplossing.
Maar nu is dus de vraag:
Waarom werkt het niet met
setxkbmapen wel via gnome-control-center?
Na diep graven in de sources van gnome-settings-daemon,
gnome-control-center en libxklavier bleek dat libxklavier
een eigen interface heeft naar de keyboard settings van X. Als je
libxklavier compileert wordt er in de tests/ directory een 2-tal
tooltjes gemaakt: test_config en test_monitor. Waarvan test_config
er veelbelovend uit ziet:
Usage: test_config (-g)|(-s -m <model> -l <layouts> -o <options>)
|(-h)|(-ws)|(-wb)(-d <debugLevel>)
Options:
-al - list all available layouts and variants
-am - list all available models
-ao - list all available options groups and options
-ac - list all available ISO country codes
-ag - list all available ISO language codes
-g - Dump the current config, load original system settings and revert back
-s - Set the configuration given my -m -l -o options. Similar to setxkbmap
-ws - Write the binary XKB config file (libxklavier.xkm)
-wb - Write the source XKB config file (libxklavier.xkb)
-d - Set the debug level (by default, 0)
-h - Show this help
Dit lijkt wel heel veel op wat setxkbmap kan... En ja hoor:
Print de huidige instellingen:
% setxkbmap -print
xkb_keymap {
xkb_keycodes { include "xfree86+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us" };
xkb_geometry { include "pc(pc105)" };
};
Nu nieuwe gegevens inladen met behulp van test_config. We zetten
(-s) het toetsenbord op 105 tekens (-m pc105) en
gebruiken de nl layout (-l nl):
% ./libxklavier-3.9/tests/test_config -s -m pc105 -l nl
Checken:
setxkbmap -print
xkb_keymap {
xkb_keycodes { include "xfree86+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+nl" };
xkb_geometry { include "pc(pc105)" };
};
Werkt! :-) Geen foutmelding en het toetsenbord werkt ook echt.
Waarom dit wel werkt en setxkbmap niet is mij een raadsel. Maar
goed, ik kan het instellen.
Nu nog de losse eindjes opruimen en eventueel een klein shell scriptje maken met zenity zodat de eindgebruikers hiermee aan de slag kunnen.
4 comments
Ik vind zelf de open box window manager fantastisch snel en helder en ook zeer goed te configureren. Ideaal voor een werkomgeving.
Mijn window manager list gaat ongeveer:
FVWM, FVWM95, Windowmaker, KDE (1.0 ofzo), Fluxbox, Openbox, Gnome, KDE (3.nogwat), Gnome, Xfce.
Maar dit is een groot project, kan nu niet ineens van window manager veranderen.
Zetten van deadkeys:
./test_config -s -m pc105 -l us_intlUitzetten van deadkeys:
./test_config -s -m pc105 -l usEen goede manier om te testen of het werkt is met
xev.Het verschil is goed te zien in de volgende voorbeelden:
state 0x0, keycode 48 (keysym 0xfe51, dead_acute), same_screen YES,
state 0x0, keycode 48 (keysym 0x27, apostrophe), same_screen YES,
~/.dmrc. Hier staat nog een keer de layout van je toetsenbord. Waarschijnlijk wordt deze file door
gdm geschreven. Typisch inhoud is:[Desktop]
Session=xfce
Layout=us
Language=nl_NL.UTF-8

