E accent?

Posted in dutch; comments: 4

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:

  1. een toetsenbord model: model
  2. een layout: layout; op welke toetsen horen welke karakters
  3. 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 setxkbmap en 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.

Tags: dutch

4 comments

Heb je LXDE desktop al wel eens bekeken? Voor Windows gebruikers is dat een hele makkelijke omgeving.Vooral vanwege de iconen op het bureaublad en het menu.
Ik vind zelf de open box window manager fantastisch snel en helder en ook zeer goed te configureren. Ideaal voor een werkomgeving.
Wel bekeken, maar nooit echt gerunt. Ik draai al wat langer mee. Openbox heb ik een paar jaar geleden gedraaid. Werkte prima, vond alleen het menu lelijk (niet GTK) in combinatie met GTK applicaties.

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.
Hele dag verspild, maar je moet dus een nieuwe terminal starten (echt een nieuw process) om te kunnen testen of het echt werkt.

Zetten van deadkeys:
./test_config -s -m pc105 -l us_intl

Uitzetten van deadkeys:
./test_config -s -m pc105 -l us

Een 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,

En ja hoor nog een belangrijke file: ~/.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

Comments are closed

If you really, really want to comment, please mail miek@miek.nl.

0 comments in moderator queue