हां, XKB का उपयोग करना संभव है। एक्समॉडमैप के विपरीत, एक्सकेबी व्यक्तिगत उपकरणों के लिए आपकी चाबियाँ फिर से तैयार कर सकता है।
नोट: सुनिश्चित करें कि आपके पास xkbcomp> 1.2.0 है
पहले अपने उपकरणों को इसके साथ सूचीबद्ध करें:
xinput list
आपको कुछ इस तरह मिलेगा:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Wacom Bamboo Pen Pen stylus id=11 [slave pointer (2)]
⎜ ↳ Wacom Bamboo Pen Finger touch id=12 [slave pointer (2)]
⎜ ↳ Logitech USB-PS/2 Optical Mouse id=13 [slave pointer (2)]
⎜ ↳ Wacom Bamboo Pen Pen eraser id=14 [slave pointer (2)]
⎜ ↳ Wacom Bamboo Pen Finger pad id=15 [slave pointer (2)]
⎜ ↳ GASIA USB KB V11 id=17 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ G19 Gaming Keyboard id=8 [slave keyboard (3)]
↳ G19 Gaming Keyboard id=9 [slave keyboard (3)]
↳ Logitech G19 Gaming Keyboard id=10 [slave keyboard (3)]
↳ GASIA USB KB V11 id=16 [slave keyboard (3)]
अपने डिवाइस के स्ट्रिंग को पहचानें और निम्न शेल स्क्रिप्ट को संपादित करें, जो आपके डिवाइस के नाम को फिट करता है, उसके साथ sed लाइन को बदलना। फिर उन कुंजियों को बदलें जिनकी आपको आवश्यकता है।
उदाहरण: xev
उस कुंजी को लोड करें और दबाएं जिसे आप रीमैप करना चाहते हैं। मान लीजिए आपको पता है कि यह कीकोड 84 है । https://gist.github.com/zoqaeski/3880640 में लुकअप 84 । वहाँ प्रमुख नाम है <KP5>
। फिर उस कुंजी को देखें जिसे आप चाहते हैं कि (उसी लिंक में, नीचे से आगे ) द्वारा प्रतिस्थापित किया गया है और कोष्ठक के अंदर क्या है उसे कॉपी करें। अपनी इच्छित सभी कुंजी के लिए प्रक्रिया को दोहराएं।
remote_id=$(
xinput list |
sed -n 's/.*GASIA.*id=\([0-9]*\).*keyboard.*/\1/p'
)
[ "$remote_id" ] || exit
# remap the following keys, only for my custom vintage atari joystick connected
# through an old USB keyboard:
#
# keypad 5 -> keypad 6
# . -> keypad 2
# [ -> keypad 8
# left shift -> left control
mkdir -p /tmp/xkb/symbols
# This is a name for the file, it could be anything you
# want. For us, we'll name it "custom". This is important
# later.
#
# The KP_* come from /usr/include/X11/keysymdef.h
# Also note the name, "remote" is there in the stanza
# definition.
cat >/tmp/xkb/symbols/custom <<\EOF
xkb_symbols "remote" {
key <KP5> { [ KP_Right, KP_6, U2192, U21D2 ] };
key <I129> { [ KP_Down, KP_2, U2193, U21D3 ] };
key <AD12> { [ KP_Up, KP_8, U2191, U21D1 ] };
key <LFSH> { [ Control_L ] };
};
EOF
# (1) We list our current definition
# (2) Modify it to have a keyboard mapping using the name
# we used above, in this case it's the "remote" definition
# described in the file named "custom" which we specify in
# this world as "custom(remote)".
# (3) Now we take that as input back into our definition of the
# keyboard. This includes the file we just made, read in last,
# so as to override any prior definitions. Importantly we
# need to include the directory of the place we placed the file
# to be considered when reading things in.
#
# Also notice that we aren't including exactly the
# directory we specified above. In this case, it will be looking
# for a directory structure similar to /usr/share/X11/xkb
#
# What we provided was a "symbols" file. That's why above we put
# the file into a "symbols" directory, which is not being included
# below.
setxkbmap -device $remote_id -print \
| sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' \
| xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null
फिर इसे स्रोत (आप इसे अपने .xinitrc में जोड़ सकते हैं)। सब कुछ कर दिया! अब चाबियाँ दबाकर वांछित आउटपुट उत्पन्न करना चाहिए, केवल आपके द्वारा निर्दिष्ट डिवाइस के लिए।
संपादित करें : हाल ही में, मैंने देखा है कि, किसी कारण से, नया कॉन्फ़िगरेशन तुरंत लागू नहीं होता है। आपको पहले अपने अन्य कीबोर्ड पर एक कुंजी दबानी होगी , फिर अपने संशोधित कीबोर्ड पर कॉन्फ़िगर की हुई कुंजियों का परीक्षण करना होगा। मुझे नहीं पता कि ऐसा क्यों होता है, शायद किसी प्रकार का कैश।