[Bug 19947] xkbcomp-1.0.5: Group width mismatch between key and type

Martin MOKREJŠ mmokrejs at ribosome.natur.cuni.cz
Mon Feb 23 08:11:24 PST 2009


Hi Peter,
  thanks for excellent explanations. More below.

Peter Hutterer wrote:
>> (**) Option "xkb_rules" "evdev"
>> (**) AT Translated Set 2 keyboard: xkb_rules: "evdev"
>> (**) Option "xkb_model" "evdev"
>> (**) AT Translated Set 2 keyboard: xkb_model: "evdev"
>> (**) Option "xkb_layout" "us,cz"
>> (**) AT Translated Set 2 keyboard: xkb_layout: "us,cz"
>> (**) Option "xkb_variant" ",qwerty"
>> (**) AT Translated Set 2 keyboard: xkb_variant: ",qwerty"
>> (**) Option "xkb_options" "grp:alt_shift_togglegrp_led:scrollcaps:shift_nocancel"
>> (**) AT Translated Set 2 keyboard: xkb_options: "grp:alt_shift_togglegrp_led:scrollcaps:shift_nocancel"
> 
> this last line is wrong, see below.
> 
>> xkb_keymap {
>> xkb_keycodes "evdev+aliases(qwerty)" {
> [...]
>  
>> xkb_types "complete" {
> [...]
> 
>> xkb_compatibility "complete" {
> [...]
> 
>> xkb_symbols "pc+us+cz(qwerty):2+inet(evdev)" {
> [...]
> 
> this is what actually is loaded in the server. You see how all your options
> are missing? This is because of a wrong setup (fdi file below).

Until one know how it should look like it is not that clear.
Now I see what had to be there:

(II) config/hal: Adding input device AT Translated Set 2 keyboard
(**) AT Translated Set 2 keyboard: always reports core events
(**) AT Translated Set 2 keyboard: Device: "/dev/input/event4"
(II) AT Translated Set 2 keyboard: Found keys
(II) AT Translated Set 2 keyboard: Configuring as keyboard
(II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_model" "pc105"
(**) Option "xkb_layout" "us,cz"
(**) Option "xkb_variant" ",qwerty"
(**) Option "xkb_options" "grp:alt_shift_toggle,grp_led:scroll,caps:shift_nocancel"

 > 
>>     key <LFSH> {         [         Shift_L ] };
>>     key <RTSH> {         [         Shift_R ] };
>>     key <LALT> {         [           Alt_L,          Meta_L ] };
>>     key <RALT> {
>>         type[group2]= "ONE_LEVEL",
>>         symbols[Group1]= [           Alt_R,          Meta_R ],
>>         symbols[Group2]= [ ISO_Level3_Shift ]
>>     };
> 
> here's the details why it doesn't work, the Alt/Shift keys dont have the
> required ISO_Next_Group, ISO_Prev_Group they should have, hence group
> switching doesn't work.


So here is what I have now compared to the former/broken:

# xkbcomp :0 -xkb out.xkb3
# diff -u -w out.xkb out.xkb3
--- out.xkb     2009-02-12 17:54:32.000000000 +0100
+++ root/out.xkb3       2009-02-23 16:56:36.000000000 +0100
@@ -291,7 +291,7 @@
     alias <LatM> = <AB07>;
 };
 
-xkb_types "complete" {
+xkb_types "complete+caps(shift_nocancel)" {
 
     virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
 
@@ -309,6 +309,7 @@
         modifiers= Shift+Lock;
         map[Shift]= Level2;
         map[Lock]= Level2;
+        map[Shift+Lock]= Level2;
         level_name[Level1]= "Base";
         level_name[Level2]= "Caps";
     };
@@ -489,10 +490,11 @@
         modifiers= Shift+Lock+LevelThree;
         map[Shift]= Level2;
         map[Lock]= Level2;
+        map[Shift+Lock]= Level2;
         map[LevelThree]= Level3;
         map[Shift+LevelThree]= Level4;
         map[Lock+LevelThree]= Level4;
-        map[Shift+Lock+LevelThree]= Level3;
+        map[Shift+Lock+LevelThree]= Level4;
         level_name[Level1]= "Base";
         level_name[Level2]= "Shift";
         level_name[Level3]= "Alt Base";
@@ -502,6 +504,7 @@
         modifiers= Shift+Lock+LevelThree;
         map[Shift]= Level2;
         map[Lock]= Level2;
+        map[Shift+Lock]= Level2;
         map[LevelThree]= Level3;
         map[Shift+LevelThree]= Level4;
         map[Lock+LevelThree]= Level3;
@@ -582,7 +585,7 @@
     };
 };
 
-xkb_compatibility "complete" {
+xkb_compatibility "complete+ledscroll(group_lock)" {
 
     virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;
 
@@ -1048,8 +1051,7 @@
         modifiers= NumLock;
     };
     indicator "Scroll Lock" {
-        whichModState= locked;
-        modifiers= ScrollLock;
+        groups= 0xfe;
     };
     indicator "Shift Lock" {
         !allowExplicit;
@@ -1066,7 +1068,7 @@
     };
 };
 
-xkb_symbols "pc+us+cz(qwerty):2+inet(evdev)" {
+xkb_symbols "pc+us+cz(qwerty):2+inet(evdev)+group(alt_shift_toggle)" {
 
     name[group1]="USA";
     name[group2]="Czechia - qwerty";
@@ -1278,7 +1280,10 @@
         symbols[Group1]= [           grave,      asciitilde ],
         symbols[Group2]= [       semicolon,  dead_abovering,           grave,      asciitilde ]
     };
-    key <LFSH> {         [         Shift_L ] };
+    key <LFSH> {
+        type= "PC_ALT_LEVEL2",
+        symbols[Group1]= [         Shift_L,  ISO_Prev_Group ]
+    };
     key <BKSL> {
         type[group2]= "FOUR_LEVEL",
         symbols[Group1]= [       backslash,             bar ],
@@ -1341,12 +1346,15 @@
         symbols[Group1]= [           slash,        question ],
         symbols[Group2]= [           minus,      underscore,        asterisk,   dead_abovedot ]
     };
-    key <RTSH> {         [         Shift_R ] };
+    key <RTSH> {
+        type= "PC_ALT_LEVEL2",
+        symbols[Group1]= [         Shift_R,  ISO_Next_Group ]
+    };
     key <KPMU> {
         type= "CTRL+ALT",
         symbols[Group1]= [     KP_Multiply,  XF86_ClearGrab ]
     };
-    key <LALT> {         [           Alt_L,          Meta_L ] };
+    key <LALT> {         [           Alt_L,  ISO_Prev_Group ] };
     key <SPCE> {
         type[group2]= "FOUR_LEVEL",
         symbols[Group1]= [           space ],
@@ -1446,7 +1454,7 @@
     };
     key <RALT> {
         type[group2]= "ONE_LEVEL",
-        symbols[Group1]= [           Alt_R,          Meta_R ],
+        symbols[Group1]= [           Alt_R,  ISO_Next_Group ],
         symbols[Group2]= [ ISO_Level3_Shift ]
     };
     key <LNFD> {         [        Linefeed ] };
@@ -1516,7 +1524,7 @@
     key <I177> {         [       XF86Phone ] };
     key <I179> {         [       XF86Tools ] };
     key <I180> {         [    XF86HomePage ] };
-    key <I181> {         [     XF86Refresh ] };
+    key <I181> {         [      XF86Reload ] };
     key <I182> {         [       XF86Close ] };
     key <I185> {         [    XF86ScrollUp ] };
     key <I186> {         [  XF86ScrollDown ] };


<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
  <device>
   <match key="info.capabilities" contains="input.mouse">
      <merge key="input.x11_driver" type="string">mouse</merge>
      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
        <merge key="input.x11_driver" type="string">evdev</merge>
      </match>
   </match>

   <match key="info.capabilities" contains="input.keyboard">
      <merge key="input.x11_driver" type="string">evdev</merge>
      <merge key="input.xkb.rules" type="string">xorg</merge>
      <merge key="input.xkb.model" type="string">pc105</merge>
      <merge key="input.xkb.layout" type="string">us,cz</merge>
      <merge key="input.xkb.variant" type="string">,qwerty</merge>
      <!-- replace 'strlist' with 'string' on 'input.xkb.options' lines,
           see http://bugs.gentoo.org/show_bug.cgi?id=237742#c5 -->
      <merge key="input.xkb.options" type="string">grp:alt_shift_toggle,grp_led:scroll,caps:shift_nocancel</merge>
   </match>

   <match key="info.product" contains="Video Bus">
      <remove key="input.x11_driver"/>
      <remove key="input.xkb"/>
   </match>
  </device>
</deviceinfo>

So I am still using the deprecated syntax as mentioned in
http://cgit.freedesktop.org/xorg/xserver/tree/config/x11-input.fdi 
It is worth changing? ;-)

> Anyway, this explains your troubles, xkb options need to be separated
> by commas, you're just appending strings (a leftover from what I guess used to
> be your strlist configuration), leading to the string we saw in the log. this
> string doesn't represent a valid option, so nothing happens.
> either append commas, or just do away with the <append> tag and add
> everything in the <merge> line, comma-separated of course.

Why is not hal issuing some error/warning messages that there are not
meaningful lines? So what is the strlist and string difference in respect
to append and merge?


Regarding the "Video Bus" issue I had ... lshal(1) reported:
udi = '/org/freedesktop/Hal/devices/computer_logicaldev_input'
  info.addons.singleton = {'hald-addon-input'} (string list)
  info.capabilities = {'input', 'input.keys', 'button'} (string list)
  info.category = 'input'  (string)
  info.parent = '/org/freedesktop/Hal/devices/computer'  (string)
  info.product = 'Video Bus'  (string)
  info.subsystem = 'input'  (string)
  info.udi = '/org/freedesktop/Hal/devices/computer_logicaldev_input'  (string)
  input.device = '/dev/input/event6'  (string)
  input.product = 'Video Bus'  (string)
  input.x11_driver = 'evdev'  (string)
  input.xkb.layout = 'us'  (string)
  input.xkb.model = 'evdev'  (string)
  input.xkb.rules = 'base'  (string)
  input.xkb.variant = ''  (string)
  linux.device_file = '/dev/input/event6'  (string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'input'  (string)
  linux.sysfs_path = '/sys/devices/LNXSYSTM:00/device:00/PNP0A03:00/device:01/LNXVIDEO:00/input/input6/event6'  (string)

I though it is weird if a keyboard layout is assigned to a probably
an S-video or VGA output from my laptop. Why is it announcing
'input.keys'?

Thanks,
Martin



More information about the xorg mailing list