Merge pull request #3138 from matt335672/update_scancode_processing

Update scancode processing
This commit is contained in:
matt335672 2024-08-06 09:39:41 +01:00 committed by GitHub
commit 8fd941632d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
50 changed files with 1409 additions and 546 deletions

View File

@ -20,6 +20,7 @@ include_HEADERS = \
xrdp_client_info.h \ xrdp_client_info.h \
xrdp_constants.h \ xrdp_constants.h \
xrdp_rail.h \ xrdp_rail.h \
xrdp_scancode_defs.h \
xrdp_sockets.h xrdp_sockets.h
AM_CPPFLAGS = \ AM_CPPFLAGS = \

View File

@ -480,13 +480,10 @@
#define RDP_INPUT_MOUSEX 0x8002 #define RDP_INPUT_MOUSEX 0x8002
/* Keyboard Event: keyboardFlags (2.2.8.1.1.3.1.1.1) */ /* Keyboard Event: keyboardFlags (2.2.8.1.1.3.1.1.1) */
/* TODO: to be renamed */ #define KBDFLAGS_EXTENDED 0x0100
#define KBD_FLAG_RIGHT 0x0001 #define KBDFLAGS_EXTENDED1 0x0200
#define KBD_FLAG_EXT 0x0100 /* KBDFLAGS_EXTENDED */ #define KBDFLAGS_DOWN 0x4000
#define KBD_FLAG_EXT1 0x0200 /* KBDFLAGS_EXTENDED1 */ #define KBDFLAGS_RELEASE 0x8000
#define KBD_FLAG_QUIET 0x1000
#define KBD_FLAG_DOWN 0x4000
#define KBD_FLAG_UP 0x8000
/* Mouse Event: pointerFlags (2.2.8.1.1.3.1.1.3) */ /* Mouse Event: pointerFlags (2.2.8.1.1.3.1.1.3) */
#define PTRFLAGS_HWHEEL 0x0400 #define PTRFLAGS_HWHEEL 0x0400
@ -505,10 +502,9 @@
#define PTRXFLAGS_BUTTON2 0x0002 #define PTRXFLAGS_BUTTON2 0x0002
/* Synchronize Event: toggleFlags (2.2.8.1.1.3.1.1.5) */ /* Synchronize Event: toggleFlags (2.2.8.1.1.3.1.1.5) */
/* TODO: to be renamed */ #define TS_SYNC_SCROLL_LOCK 0x0001
#define KBD_FLAG_SCROLL 0x0001 /* TS_SYNC_SCROLL_LOCK */ #define TS_SYNC_NUM_LOCK 0x0002
#define KBD_FLAG_NUMLOCK 0x0002 #define TS_SYNC_CAPS_LOCK 0x0004
#define KBD_FLAG_CAPITAL 0x0004
#define TS_SYNC_KANA_LOCK 0x0008 #define TS_SYNC_KANA_LOCK 0x0008
/* Client Fast-Path Input Event PDU 2.2.8.1.2 */ /* Client Fast-Path Input Event PDU 2.2.8.1.2 */

View File

@ -137,6 +137,7 @@ static const struct scancode_to_keycode
{ 0x079, 100 }, // - HENK { 0x079, 100 }, // - HENK
{ 0x07b, 102 }, // VK_OEM_PA1 MUHE { 0x07b, 102 }, // VK_OEM_PA1 MUHE
{ 0x07d, 132 }, // - AE13 { 0x07d, 132 }, // - AE13
{ 0x07e, 129 }, // VK_ABNT_C2 KPPT (Brazil ABNT2)
{ 0x110, 173 }, // VK_MEDIA_PREV_TRACK I173 (KEY_PREVIOUSSONG) { 0x110, 173 }, // VK_MEDIA_PREV_TRACK I173 (KEY_PREVIOUSSONG)
{ 0x119, 171 }, // VK_MEDIA_NEXT_TRACK I171 (KEY_NEXTSONG) { 0x119, 171 }, // VK_MEDIA_NEXT_TRACK I171 (KEY_NEXTSONG)
{ 0x11c, 104 }, // VK_RETURN KPEN { 0x11c, 104 }, // VK_RETURN KPEN
@ -167,7 +168,8 @@ static const struct scancode_to_keycode
{ 0x165, 225 }, // VK_BROWSER_SEARCH I225 (KEY_SEARCH) { 0x165, 225 }, // VK_BROWSER_SEARCH I225 (KEY_SEARCH)
{ 0x166, 164 }, // VK_BROWSER_FAVORITES I164 (KEY_BOOKMARKS) { 0x166, 164 }, // VK_BROWSER_FAVORITES I164 (KEY_BOOKMARKS)
{ 0x16b, 165 }, // VK_LAUNCH_APP1 I165 (KEY_COMPUTER) { 0x16b, 165 }, // VK_LAUNCH_APP1 I165 (KEY_COMPUTER)
{ 0x16c, 163 } // VK_LAUNCH_MAIL I163 (KEY_MAIL) { 0x16c, 163 }, // VK_LAUNCH_MAIL I163 (KEY_MAIL)
{ 0x21d, 127 } // VK_PAUSE PAUS (KEY_PAUSE)
}; };
// Sources:- // Sources:-
@ -271,6 +273,7 @@ static const struct scancode_to_keycode
{ 0x079, 129 }, // - XFER { 0x079, 129 }, // - XFER
{ 0x07b, 131 }, // VK_OEM_PA1 NFER { 0x07b, 131 }, // VK_OEM_PA1 NFER
{ 0x07d, 133 }, // - AE13 { 0x07d, 133 }, // - AE13
{ 0x07e, 134 }, // VK_ABNT_C2 KPPT (Brazil ABNT2)
{ 0x11c, 108 }, // VK_RETURN KPEN { 0x11c, 108 }, // VK_RETURN KPEN
{ 0x11d, 109 }, // VK_RCONTROL RCTL { 0x11d, 109 }, // VK_RCONTROL RCTL
{ 0x120, 141 }, // VK_VOLUME_MUTE MUTE { 0x120, 141 }, // VK_VOLUME_MUTE MUTE
@ -291,7 +294,8 @@ static const struct scancode_to_keycode
{ 0x153, 107 }, // VK_DELETE DELE { 0x153, 107 }, // VK_DELETE DELE
{ 0x15b, 115 }, // VK_LWIN LWIN { 0x15b, 115 }, // VK_LWIN LWIN
{ 0x15c, 116 }, // VK_RWIN RWIN { 0x15c, 116 }, // VK_RWIN RWIN
{ 0x15d, 117 } // VK_APPS COMP { 0x15d, 117 }, // VK_APPS COMP
{ 0x21d, 110 } // VK_PAUSE PAUS (KEY_PAUSE)
}; };
struct map_settings struct map_settings
@ -326,9 +330,63 @@ const struct map_settings global_settings[] =
// Default mapping set is "evdev" // Default mapping set is "evdev"
const struct map_settings *settings = &global_settings[SI_EVDEV]; const struct map_settings *settings = &global_settings[SI_EVDEV];
/*****************************************************************************/
int
scancode_to_index(unsigned short scancode)
{
if (scancode <= 0x7f)
{
return scancode;
}
if (scancode <= 0xff)
{
// 0x80 - 0xff : Invalid code
return -1;
}
if (scancode <= 0x177)
{
// 01x100 - 0x177 : Move bit 9 to bit 8
return (scancode & 0x7f) | 0x80;
}
if (scancode == SCANCODE_PAUSE_KEY)
{
return SCANCODE_INDEX_PAUSE_KEY;
}
// This leaves the following which are all rejected
// 0x178 - 0x17f (currently unused). These would map to indexes 0xf8
// to 0xff which we are reserving for extended1 keys.
// 0x180 - 0x1ff Illegal format
// >0x200 Anything not mentioned explicitly above (e.g.
// SCANCODE_PAUSE_KEY)
return -1;
}
/*****************************************************************************/ /*****************************************************************************/
unsigned short unsigned short
scancode_to_keycode(unsigned short scancode) scancode_from_index(int index)
{
index &= 0xff;
unsigned short result;
if (index == SCANCODE_INDEX_PAUSE_KEY)
{
result = SCANCODE_PAUSE_KEY;
}
else if (index < 0x80)
{
result = index;
}
else
{
result = (index & 0x7f) | 0x100;
}
return result;
}
/*****************************************************************************/
unsigned short
scancode_to_x11_keycode(unsigned short scancode)
{ {
unsigned int min = 0; unsigned int min = 0;
unsigned int max = settings->size; unsigned int max = settings->size;
@ -419,3 +477,12 @@ scancode_get_keycode_set(void)
{ {
return settings->name; return settings->name;
} }
/*****************************************************************************/
const char *
scancode_get_xkb_rules(void)
{
// Currently supported keycods map directly to the same name for
// the rules which use them.
return settings->name;
}

View File

@ -18,13 +18,32 @@
* @file common/scancode.h * @file common/scancode.h
* @brief Scancode handling * @brief Scancode handling
* *
* Convert between RDP scancodes and X11 keycodes. * This module provides functionality for the following:-
* 1) Mapping from TS_KEYBOARD_EVENT PDU values to an 'RDP scancode'
* 2) Handling RDP scancodes
* 3) Convert between RDP scancodes and X11 keycodes.
* *
* RDP scancodes are largely the same as Windows scancodes. These are * The values received in TS_KEYBOARD_EVENT PDUs are largely the same as
* indirectly documented in the Microsoft "Keyboard Scan Code Specification", * Windows scancodes. These are indirectly documented in the Microsoft
* Rev 1.3a (March 16th 2000) and are otherwise known as "Scan code set * "Keyboard Scan Code Specification", Rev 1.3a (March 16th 2000) and
* 1" scancodes. This document no longer appears to be available directly from * are otherwise known as "Scan code set 1" scancodes. This document no
* the Microsoft website. * longer appears to be available directly from the Microsoft website.
*
* A TS_KEYBOARD_EVENT_PDU contains two important values:-
* 1) key_code This is not unique. For example, left-shift and
* right-shift share a key_code of 0x2a
* 2) keyboard_flags Among other flags, contains KBDFLAGS_EXTENDED and
* KBDFLAGS_EXTENDED1. These combine with the key_code
* to allow a specific key to be determined.
*
* An 'RDP scancode' as defined by this module is a mapping of the
* Windows key_code and keyboard_flags into a single value which
* represents a unique key. For example:-
* Left control : key_code=0x1d, KBDFLAGS_EXTENDED=0 scancode = 0x1d
* Right control : key_code=0x1d, KBDFLAGS_EXTENDED=1 scancode = 0x11d
*
* This model of unique keys more closely maps what X11 does with its
* own keycodes.
* *
* X11 keycodes are the X11 equivalent of RDP scancodes. In general, these * X11 keycodes are the X11 equivalent of RDP scancodes. In general, these
* are specific to an X server. In practice however, these are nowadays * are specific to an X server. In practice however, these are nowadays
@ -39,15 +58,69 @@
#if !defined(SCANCODE_H) #if !defined(SCANCODE_H)
#define SCANCODE_H #define SCANCODE_H
#include "xrdp_scancode_defs.h"
enum
{
/**
* Scancodes for keys used in the code are defined in the global
* file xrdp_scancode_defs.h
*/
/**
* Scancode indexes for some of the keys in xrdp_scancode_defs.h
*/
SCANCODE_INDEX_LSHIFT_KEY = SCANCODE_LSHIFT_KEY,
SCANCODE_INDEX_RSHIFT_KEY = SCANCODE_RSHIFT_KEY,
SCANCODE_INDEX_RALT_KEY = (SCANCODE_RALT_KEY & 0x7f) | 0x80,
SCANCODE_INDEX_PAUSE_KEY = 0xf8,
// 0xf9 - 0xff reserved for future extended1 mappings
/**
* Maximum value returned by scancode_to_index()
*/
SCANCODE_MAX_INDEX = 255
};
/** /**
* Looks up an RDP scancode * Convert a scancode to an index
* @param scancode scancode in the range 0x00 - 0x2ff
* @return index in the range 0..SCANCODE_MAX_INDEX (inclusive) or -1
*
* This function converts a 10-bit scancode into an 8-bit array index,
* independent of the currently loaded keymap
*
* This is possible as the scancodes from 0x80 - 0x2ff are sparsely allocated.
*
* For scancodes in the range 0x00 - 0x7f, the index is identical to the
* scancode. This includes scancodes for all the keys affected by
* numlock.
*/
int
scancode_to_index(unsigned short scancode);
/**
* Convert an index back to a scancode.
* @param index in the range 0..SCANCODE_MAX_INDEX
*
* @result scancode which is mapped to the index value
*
* The result is always a valid scancode, even if the index is
* not valid.
*/
unsigned short
scancode_from_index(int index);
/**
* Looks up an RDP scancode and converts to an x11 keycode
* *
* @param scancode Scancode. Extended scancodes have bit 9 set * @param scancode Scancode. Extended scancodes have bit 9 set
* (i.e. are in 0x100 - 0x1ff) * (i.e. are in 0x100 - 0x1ff). Extended1 scancodes
* (currently just the pause key) are in the range 0x200-0x2ff
* @return keycode, or 0 for no keycode * @return keycode, or 0 for no keycode
*/ */
unsigned short unsigned short
scancode_to_keycode(unsigned short scancode); scancode_to_x11_keycode(unsigned short scancode);
/** /**
* Gets the next valid scancode from the list of valid scancodes * Gets the next valid scancode from the list of valid scancodes
@ -84,4 +157,13 @@ scancode_set_keycode_set(const char *kk_set);
const char * const char *
scancode_get_keycode_set(void); scancode_get_keycode_set(void);
/**
* Gets the XKB rules set which can be used to access the currently
* loaded keycode set
*
* @result "evdev", or "base"
*/
const char *
scancode_get_xkb_rules(void);
#endif /* SCANCODE_H */ #endif /* SCANCODE_H */

View File

@ -200,6 +200,11 @@ struct xrdp_client_info
char layout[16]; char layout[16];
char variant[16]; char variant[16];
char options[256]; char options[256];
char xkb_rules[32];
// A few x11 keycodes are needed by the xup module
int x11_keycode_caps_lock;
int x11_keycode_num_lock;
int x11_keycode_scroll_lock;
/* ==================================================================== */ /* ==================================================================== */
/* Private to xrdp below this line */ /* Private to xrdp below this line */
@ -269,6 +274,6 @@ enum xrdp_encoder_flags
/* yyyymmdd of last incompatible change to xrdp_client_info */ /* yyyymmdd of last incompatible change to xrdp_client_info */
/* also used for changes to all the xrdp installed headers */ /* also used for changes to all the xrdp installed headers */
#define CLIENT_INFO_CURRENT_VERSION 20240514 #define CLIENT_INFO_CURRENT_VERSION 20240805
#endif #endif

View File

@ -63,9 +63,6 @@
#define XRDP_MAX_BITMAP_CACHE_IDX 2000 #define XRDP_MAX_BITMAP_CACHE_IDX 2000
#define XRDP_BITMAP_CACHE_ENTRIES 2048 #define XRDP_BITMAP_CACHE_ENTRIES 2048
#define XR_MIN_KEY_CODE 8
#define XR_MAX_KEY_CODE 256
/* /*
* Constants come from ITU-T Recommendations * Constants come from ITU-T Recommendations
*/ */
@ -288,12 +285,6 @@
#define FASTPATH_MAX_PACKET_SIZE 0x3fff #define FASTPATH_MAX_PACKET_SIZE 0x3fff
#define XR_RDP_SCAN_LSHIFT 42
#define XR_RDP_SCAN_ALT 56
// scancodes affected by numlock
#define XR_RDP_SCAN_MIN_NUMLOCK 71 // KP7
#define XR_RDP_SCAN_MAX_NUMLOCK 83 // KPDL
// Since we're not guaranteed to have pixman, copy these directives. // Since we're not guaranteed to have pixman, copy these directives.
#define XRDP_PIXMAN_TYPE_ARGB 2 #define XRDP_PIXMAN_TYPE_ARGB 2
#define XRDP_PIXMAN_TYPE_ABGR 3 #define XRDP_PIXMAN_TYPE_ABGR 3

View File

@ -0,0 +1,88 @@
/**
* Copyright (C) 2024 Matt Burt, all xrdp contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file common/xrdp_scancode_defs.h
* @brief Scancode global definitions, shared with xorgxrdp
*/
#if !defined(XRDP_SCANCODE_DEFS_H)
#define XRDP_SCANCODE_DEFS_H
enum
{
/**
* Scancodes for keys received from the RDP client
*/
SCANCODE_LSHIFT_KEY = 0x2a,
SCANCODE_RSHIFT_KEY = 0x36,
SCANCODE_LCTRL_KEY = 0x1d,
SCANCODE_RCTRL_KEY = 0x11d,
SCANCODE_CAPS_KEY = 0x3a,
SCANCODE_NUMLOCK_KEY = 0x45,
SCANCODE_SCROLL_KEY = 0x46, // Scroll lock
SCANCODE_LALT_KEY = 0x38,
SCANCODE_RALT_KEY = 0x138,
SCANCODE_LWIN_KEY = 0x15b,
SCANCODE_RWIN_KEY = 0x15c,
SCANCODE_MENU_KEY = 0x15d,
SCANCODE_ESC_KEY = 0x01,
SCANCODE_BACKSPACE_KEY = 0x0e,
SCANCODE_ENTER_KEY = 0x1c,
SCANCODE_TAB_KEY = 0x0f,
SCANCODE_PAUSE_KEY = 0x21d,
SCANCODE_KP_ENTER_KEY = 0x11c,
SCANCODE_KP_DEL_KEY = 0x53,
SCANCODE_KP_1_KEY = 0x4f,
SCANCODE_KP_2_KEY = 0x50,
SCANCODE_KP_4_KEY = 0x4b,
SCANCODE_KP_6_KEY = 0x4d,
SCANCODE_KP_7_KEY = 0x47,
SCANCODE_KP_8_KEY = 0x48,
SCANCODE_LEFT_ARROW_KEY = 0x14b,
SCANCODE_RIGHT_ARROW_KEY = 0x14d,
SCANCODE_UP_ARROW_KEY = 0x148,
SCANCODE_DOWN_ARROW_KEY = 0x150,
SCANCODE_HOME_KEY = 0x147,
SCANCODE_DEL_KEY = 0x153,
SCANCODE_END_KEY = 0x14f,
/**
* Keys affected by numlock
* (this is not the whole keypad)
*/
SCANCODE_MIN_NUMLOCK = SCANCODE_KP_7_KEY,
SCANCODE_MAX_NUMLOCK = SCANCODE_KP_DEL_KEY
};
// Convert key_code and flags values received from a TS_KEYBOARD_EVENT
// into a value suitable for use by this module
#define SCANCODE_FROM_KBD_EVENT(key_code,keyboard_flags) \
(((key_code) & 0x7f) | ((keyboard_flags) & 0x300))
// Convert a scancode used by this module back into a
// TS_KEYBOARD_EVENT keyCode value
#define SCANCODE_TO_KBD_EVENT_KEY_CODE(scancode) ((scancode) & 0x7f)
// Convert a scancode used by this module back into a
// TS_KEYBOARD_EVENT keyboardFlags value
#define SCANCODE_TO_KBD_EVENT_KBD_FLAGS(scancode) ((scancode) & 0x300)
#endif /* XRDP_SCANCODE_DEFS_H */

View File

@ -390,6 +390,11 @@ use of \fBxrdp\-chansrv\fR facilities in the VNC session.
The first form of this setting is recommended, replacing \fIn\fR with the The first form of this setting is recommended, replacing \fIn\fR with the
X11 display number of the session. X11 display number of the session.
.TP
\fBkeycode_set\fR=\fI<string>\fR
[Xorg only] Asks for the specified keycode set to be used by the X server.
Normally "evdev" or "base". The default should be correct for your system.
.SH "EXAMPLES" .SH "EXAMPLES"
This is an example \fBxrdp.ini\fR: This is an example \fBxrdp.ini\fR:

View File

@ -64,7 +64,7 @@
// Scancodes affected by numlock // Scancodes affected by numlock
#define IS_KEYPAD_SCANCODE(s) \ #define IS_KEYPAD_SCANCODE(s) \
((s) >= XR_RDP_SCAN_MIN_NUMLOCK && (s) <= XR_RDP_SCAN_MAX_NUMLOCK) ((s) >= SCANCODE_MIN_NUMLOCK && (s) <= SCANCODE_MAX_NUMLOCK)
#define MAX_COMMENTS 10 #define MAX_COMMENTS 10
@ -279,7 +279,7 @@ output_file_section(FILE *outf,
continue; continue;
} }
e.keycode = scancode_to_keycode(scancode); e.keycode = scancode_to_x11_keycode(scancode);
nbytes = XLookupString(&e, text, 255, &ks, NULL); nbytes = XLookupString(&e, text, 255, &ks, NULL);
if (ks == NoSymbol) if (ks == NoSymbol)
{ {
@ -299,7 +299,11 @@ output_file_section(FILE *outf,
unicode = wtext[0]; unicode = wtext[0];
} }
if (scancode > 0xff) if (scancode > 0x1ff)
{
fputs("E1_", outf);
}
else if (scancode > 0xff)
{ {
fputs("E0_", outf); fputs("E0_", outf);
} }

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -950,6 +964,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -981,6 +996,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -707,6 +717,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -738,6 +749,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -829,6 +841,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -860,6 +873,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -951,6 +965,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -982,6 +997,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -340,6 +344,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -371,6 +376,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -581,6 +589,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -612,6 +621,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -701,6 +711,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -732,6 +743,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -823,6 +835,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -854,6 +867,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -942,6 +956,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -973,6 +988,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -826,6 +838,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -857,6 +870,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -948,6 +962,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -979,6 +994,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -99,6 +99,7 @@ version=2
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="165:U+00A5" # yen 7D="165:U+00A5" # yen
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -130,6 +131,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -223,6 +225,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="124:U+007C" # bar 7D="124:U+007C" # bar
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -254,6 +257,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -347,6 +351,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="165:U+00A5" # yen 7D="165:U+00A5" # yen
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -378,6 +383,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -471,6 +477,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="124:U+007C" # bar 7D="124:U+007C" # bar
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -502,6 +509,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -595,6 +603,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="165:U+00A5" # yen 7D="165:U+00A5" # yen
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -626,6 +635,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -719,6 +729,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="165:U+00A5" # yen 7D="165:U+00A5" # yen
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -750,6 +761,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -843,6 +855,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="124:U+007C" # bar 7D="124:U+007C" # bar
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -874,6 +887,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -967,6 +981,7 @@ E0_6C="269025049" # XF86Mail
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7D="124:U+007C" # bar 7D="124:U+007C" # bar
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -998,6 +1013,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -707,6 +717,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -738,6 +749,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -829,6 +841,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -860,6 +873,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -951,6 +965,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -982,6 +997,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -218,6 +220,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -249,6 +252,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -368,6 +373,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -581,6 +589,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -612,6 +621,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -699,6 +709,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -729,6 +740,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -819,6 +831,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -850,6 +863,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -941,6 +955,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -972,6 +987,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -98,6 +98,7 @@ version=2
73="47:U+002F" # slash 73="47:U+002F" # slash
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -129,6 +130,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -221,6 +223,7 @@ E0_6C="269025049" # XF86Mail
73="63:U+003F" # question 73="63:U+003F" # question
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -252,6 +255,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -344,6 +348,7 @@ E0_6C="269025049" # XF86Mail
73="176:U+00B0" # degree 73="176:U+00B0" # degree
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -375,6 +380,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -467,6 +473,7 @@ E0_6C="269025049" # XF86Mail
73="191:U+00BF" # questiondown 73="191:U+00BF" # questiondown
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -498,6 +505,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -590,6 +598,7 @@ E0_6C="269025049" # XF86Mail
73="47:U+002F" # slash 73="47:U+002F" # slash
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -621,6 +630,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -711,6 +721,7 @@ E0_6C="269025049" # XF86Mail
73="176:U+00B0" # degree 73="176:U+00B0" # degree
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -742,6 +753,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -834,6 +846,7 @@ E0_6C="269025049" # XF86Mail
73="63:U+003F" # question 73="63:U+003F" # question
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -865,6 +878,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -956,6 +970,7 @@ E0_6C="269025049" # XF86Mail
73="191:U+00BF" # questiondown 73="191:U+00BF" # questiondown
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -987,6 +1002,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -462,6 +468,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -493,6 +500,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -218,6 +220,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -249,6 +252,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -368,6 +373,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -580,6 +588,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -611,6 +620,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -699,6 +709,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -729,6 +740,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -819,6 +831,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -850,6 +863,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -941,6 +955,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -972,6 +987,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -462,6 +468,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -493,6 +500,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65463:U+0037" # KP_7 47="65463:U+0037" # KP_7

View File

@ -97,6 +97,7 @@ version=2
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shift] [shift]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[altgr] [altgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -369,6 +374,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftaltgr] [shiftaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -449,6 +455,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -480,6 +487,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslock] [capslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -571,6 +579,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -602,6 +611,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[capslockaltgr] [capslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -684,6 +694,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -715,6 +726,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslock] [shiftcapslock]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -806,6 +818,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -837,6 +850,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[shiftcapslockaltgr] [shiftcapslockaltgr]
01="65307:U+001B" # Escape 01="65307:U+001B" # Escape
@ -923,6 +937,7 @@ E0_6C="269025049" # XF86Mail
70="65319" # Hiragana_Katakana 70="65319" # Hiragana_Katakana
79="65315" # Henkan_Mode 79="65315" # Henkan_Mode
7B="65314" # Muhenkan 7B="65314" # Muhenkan
7E="65454:U+002E" # KP_Decimal
E0_10="269025046" # XF86AudioPrev E0_10="269025046" # XF86AudioPrev
E0_19="269025047" # XF86AudioNext E0_19="269025047" # XF86AudioNext
E0_1C="65421:U+000D" # KP_Enter E0_1C="65421:U+000D" # KP_Enter
@ -954,6 +969,7 @@ E0_65="269025051" # XF86Search
E0_66="269025072" # XF86Favorites E0_66="269025072" # XF86Favorites
E0_6B="269025075" # XF86MyComputer E0_6B="269025075" # XF86MyComputer
E0_6C="269025049" # XF86Mail E0_6C="269025049" # XF86Mail
E1_1D="65299" # Pause
[numlock] [numlock]
47="65457:U+0031" # KP_1 47="65457:U+0031" # KP_1

@ -1 +1 @@
Subproject commit c6b41afa6986d5e6df18778a342b407cae40e1b5 Subproject commit e8208bfc0b9d122b1c393a659427fbb135e9cd75

View File

@ -151,6 +151,38 @@ xrdp_fastpath_send(struct xrdp_fastpath *self, struct stream *s)
return 0; return 0;
} }
/*****************************************************************************/
/**
* Converts the fastpath keyboard event flags to slowpath event flags
* @param Faspath flags
* @return slowpath flags
*
* See [MMS-RDPBCGR] 2.2.8.1.1.3.1.1.1 and 2.2.8.1.2.2.1
*/
static int
get_slowpath_keyboard_event_flags(int fp_flags)
{
int flags = 0;
if (fp_flags & FASTPATH_INPUT_KBDFLAGS_RELEASE)
{
// Assume the key was down prior to this event - the fastpath
// message doesn't have a separate flag which maps to
// KBDFLAGS_DOWN
flags |= KBDFLAGS_DOWN | KBDFLAGS_RELEASE;
}
if (fp_flags & FASTPATH_INPUT_KBDFLAGS_EXTENDED)
{
flags |= KBDFLAGS_EXTENDED;
}
if (fp_flags & FASTPATH_INPUT_KBDFLAGS_EXTENDED1)
{
flags |= KBDFLAGS_EXTENDED1;
}
return flags;
}
/*****************************************************************************/ /*****************************************************************************/
/* FASTPATH_INPUT_EVENT_SCANCODE */ /* FASTPATH_INPUT_EVENT_SCANCODE */
static int static int
@ -159,7 +191,6 @@ xrdp_fastpath_process_EVENT_SCANCODE(struct xrdp_fastpath *self,
{ {
int flags; int flags;
int code; int code;
flags = 0;
if (!s_check_rem_and_log(s, 1, "Parsing [MS-RDPBCGR] TS_FP_KEYBOARD_EVENT")) if (!s_check_rem_and_log(s, 1, "Parsing [MS-RDPBCGR] TS_FP_KEYBOARD_EVENT"))
{ {
@ -170,24 +201,7 @@ xrdp_fastpath_process_EVENT_SCANCODE(struct xrdp_fastpath *self,
"eventHeader.eventFlags 0x%2.2x, eventHeader.eventCode (ignored), " "eventHeader.eventFlags 0x%2.2x, eventHeader.eventCode (ignored), "
"keyCode %d", eventFlags, code); "keyCode %d", eventFlags, code);
if ((eventFlags & FASTPATH_INPUT_KBDFLAGS_RELEASE)) flags = get_slowpath_keyboard_event_flags(eventFlags);
{
flags |= KBD_FLAG_UP;
}
else
{
flags |= KBD_FLAG_DOWN;
}
if ((eventFlags & FASTPATH_INPUT_KBDFLAGS_EXTENDED))
{
flags |= KBD_FLAG_EXT;
}
if ((eventFlags & FASTPATH_INPUT_KBDFLAGS_EXTENDED1))
{
flags |= KBD_FLAG_EXT1;
}
xrdp_fastpath_session_callback(self, RDP_INPUT_SCANCODE, xrdp_fastpath_session_callback(self, RDP_INPUT_SCANCODE,
code, 0, flags, 0); code, 0, flags, 0);
@ -296,7 +310,6 @@ xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
int flags; int flags;
int code; int code;
flags = 0;
if (!s_check_rem_and_log(s, 2, "Parsing [MS-RDPBCGR] TS_FP_UNICODE_KEYBOARD_EVENT")) if (!s_check_rem_and_log(s, 2, "Parsing [MS-RDPBCGR] TS_FP_UNICODE_KEYBOARD_EVENT"))
{ {
return 1; return 1;
@ -307,18 +320,8 @@ xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
"unicodeCode %d", "unicodeCode %d",
eventFlags, code); eventFlags, code);
if (eventFlags & FASTPATH_INPUT_KBDFLAGS_RELEASE) flags = get_slowpath_keyboard_event_flags(eventFlags);
{
flags |= KBD_FLAG_UP;
}
else
{
flags |= KBD_FLAG_DOWN;
}
if (eventFlags & FASTPATH_INPUT_KBDFLAGS_EXTENDED)
{
flags |= KBD_FLAG_EXT;
}
xrdp_fastpath_session_callback(self, RDP_INPUT_UNICODE, xrdp_fastpath_session_callback(self, RDP_INPUT_UNICODE,
code, 0, flags, 0); code, 0, flags, 0);
return 0; return 0;

View File

@ -155,246 +155,6 @@ hex_str_to_bin(char *in, char *out, int out_len)
} }
} }
/*****************************************************************************/
static void
xrdp_load_keyboard_layout(struct xrdp_client_info *client_info)
{
int fd;
int index = 0;
int bytes;
struct list *names = (struct list *)NULL;
struct list *items = (struct list *)NULL;
struct list *values = (struct list *)NULL;
char *item = (char *)NULL;
char *value = (char *)NULL;
char *q = (char *)NULL;
char keyboard_cfg_file[256] = { 0 };
char rdp_layout[256] = { 0 };
const struct xrdp_keyboard_overrides *ko =
&client_info->xrdp_keyboard_overrides;
LOG(LOG_LEVEL_INFO, "xrdp_load_keyboard_layout: Keyboard information sent"
" by the RDP client, keyboard_type:[0x%02X], keyboard_subtype:[0x%02X],"
" keylayout:[0x%08X]",
client_info->keyboard_type, client_info->keyboard_subtype,
client_info->keylayout);
if (ko->type != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keyboard_type 0x%02X"
" with 0x%02X", client_info->keyboard_type, ko->type);
client_info->keyboard_type = ko->type;
}
if (ko->subtype != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keyboard_subtype 0x%02X"
" with 0x%02X", client_info->keyboard_subtype,
ko->subtype);
client_info->keyboard_subtype = ko->subtype;
}
if (ko->layout != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keylayout 0x%08X"
" with 0x%08X", client_info->keylayout, ko->layout);
client_info->keylayout = ko->layout;
}
/* infer model/variant */
/* TODO specify different X11 keyboard models/variants */
g_memset(client_info->model, 0, sizeof(client_info->model));
g_memset(client_info->variant, 0, sizeof(client_info->variant));
g_strncpy(client_info->layout, "us", sizeof(client_info->layout) - 1);
if (client_info->keyboard_subtype == 3)
{
/* macintosh keyboard */
bytes = sizeof(client_info->variant);
g_strncpy(client_info->variant, "mac", bytes - 1);
}
else if (client_info->keyboard_subtype == 0)
{
/* default - standard subtype */
client_info->keyboard_subtype = 1;
}
g_snprintf(keyboard_cfg_file, 255, "%s/xrdp_keyboard.ini", XRDP_CFG_PATH);
LOG(LOG_LEVEL_DEBUG, "keyboard_cfg_file %s", keyboard_cfg_file);
fd = g_file_open_ro(keyboard_cfg_file);
if (fd >= 0)
{
int section_found = -1;
char section_rdp_layouts[256] = { 0 };
char section_layouts_map[256] = { 0 };
names = list_create();
names->auto_free = 1;
items = list_create();
items->auto_free = 1;
values = list_create();
values->auto_free = 1;
file_read_sections(fd, names);
for (index = 0; index < names->count; index++)
{
q = (char *)list_get_item(names, index);
if (g_strncasecmp("default", q, 8) != 0)
{
int i;
file_read_section(fd, q, items, values);
for (i = 0; i < items->count; i++)
{
item = (char *)list_get_item(items, i);
value = (char *)list_get_item(values, i);
LOG(LOG_LEVEL_DEBUG, "xrdp_load_keyboard_layout: item %s value %s",
item, value);
if (g_strcasecmp(item, "keyboard_type") == 0)
{
int v = g_atoi(value);
if (v == client_info->keyboard_type)
{
section_found = index;
}
}
else if (g_strcasecmp(item, "keyboard_subtype") == 0)
{
int v = g_atoi(value);
if (v != client_info->keyboard_subtype &&
section_found == index)
{
section_found = -1;
break;
}
}
else if (g_strcasecmp(item, "rdp_layouts") == 0)
{
if (section_found != -1 && section_found == index)
{
g_strncpy(section_rdp_layouts, value, 255);
}
}
else if (g_strcasecmp(item, "layouts_map") == 0)
{
if (section_found != -1 && section_found == index)
{
g_strncpy(section_layouts_map, value, 255);
}
}
else if (g_strcasecmp(item, "model") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->model);
g_memset(client_info->model, 0, bytes);
g_strncpy(client_info->model, value, bytes - 1);
}
}
else if (g_strcasecmp(item, "variant") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->variant);
g_memset(client_info->variant, 0, bytes);
g_strncpy(client_info->variant, value, bytes - 1);
}
}
else if (g_strcasecmp(item, "options") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->options);
g_memset(client_info->options, 0, bytes);
g_strncpy(client_info->options, value, bytes - 1);
}
}
else
{
/*
* mixing items from different sections will result in
* skipping over current section.
*/
LOG(LOG_LEVEL_DEBUG, "xrdp_load_keyboard_layout: skipping "
"configuration item - %s, continuing to next "
"section", item);
break;
}
}
list_clear(items);
list_clear(values);
}
}
if (section_found == -1)
{
g_memset(section_rdp_layouts, 0, sizeof(char) * 256);
g_memset(section_layouts_map, 0, sizeof(char) * 256);
// read default section
file_read_section(fd, "default", items, values);
for (index = 0; index < items->count; index++)
{
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
if (g_strcasecmp(item, "rdp_layouts") == 0)
{
g_strncpy(section_rdp_layouts, value, 255);
}
else if (g_strcasecmp(item, "layouts_map") == 0)
{
g_strncpy(section_layouts_map, value, 255);
}
}
list_clear(items);
list_clear(values);
}
/* load the map */
file_read_section(fd, section_rdp_layouts, items, values);
for (index = 0; index < items->count; index++)
{
int rdp_layout_id;
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
rdp_layout_id = g_htoi(value);
if (rdp_layout_id == client_info->keylayout)
{
g_strncpy(rdp_layout, item, 255);
break;
}
}
list_clear(items);
list_clear(values);
file_read_section(fd, section_layouts_map, items, values);
for (index = 0; index < items->count; index++)
{
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
if (g_strcasecmp(item, rdp_layout) == 0)
{
bytes = sizeof(client_info->layout);
g_strncpy(client_info->layout, value, bytes - 1);
break;
}
}
list_delete(names);
list_delete(items);
list_delete(values);
LOG(LOG_LEVEL_INFO, "xrdp_load_keyboard_layout: model [%s] variant [%s] "
"layout [%s] options [%s]", client_info->model,
client_info->variant, client_info->layout, client_info->options);
g_file_close(fd);
}
else
{
LOG(LOG_LEVEL_ERROR, "xrdp_load_keyboard_layout: error opening %s",
keyboard_cfg_file);
}
}
/*****************************************************************************/ /*****************************************************************************/
struct xrdp_sec * struct xrdp_sec *
xrdp_sec_create(struct xrdp_rdp *owner, struct trans *trans) xrdp_sec_create(struct xrdp_rdp *owner, struct trans *trans)
@ -2496,7 +2256,6 @@ xrdp_sec_in_mcs_data(struct xrdp_sec *self)
client_info->keyboard_type, client_info->keyboard_type,
client_info->keyboard_subtype); client_info->keyboard_subtype);
xrdp_load_keyboard_layout(client_info);
s->p = s->data; s->p = s->data;
return 0; return 0;

View File

@ -30,6 +30,7 @@
#define CURRENT_MOD_VER 3 #define CURRENT_MOD_VER 3
struct source_info; struct source_info;
struct xrdp_client_info;
/* Defined in xrdp_client_info.h */ /* Defined in xrdp_client_info.h */
struct monitor_info; struct monitor_info;
@ -98,7 +99,9 @@ struct mod
int total_data_len, int flags); int total_data_len, int flags);
int (*server_bell_trigger)(struct mod *v); int (*server_bell_trigger)(struct mod *v);
int (*server_chansrv_in_use)(struct mod *v); int (*server_chansrv_in_use)(struct mod *v);
tintptr server_dumby[100 - 28]; /* align, 100 minus the number of server void (*server_init_xkb_layout)(struct mod *v,
struct xrdp_client_info *client_info);
tintptr server_dumby[100 - 29]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as long */ tintptr handle; /* pointer to self as long */

View File

@ -143,6 +143,8 @@ struct mod
int total_data_len, int flags); int total_data_len, int flags);
int (*server_bell_trigger)(struct mod *v); int (*server_bell_trigger)(struct mod *v);
int (*server_chansrv_in_use)(struct mod *v); int (*server_chansrv_in_use)(struct mod *v);
void (*server_init_xkb_layout)(struct mod *v,
struct xrdp_client_info *client_info);
/* off screen bitmaps */ /* off screen bitmaps */
int (*server_create_os_surface)(struct mod *v, int rdpindex, int (*server_create_os_surface)(struct mod *v, int rdpindex,
int width, int height); int width, int height);
@ -197,7 +199,7 @@ struct mod
int flags, int frame_id); int flags, int frame_id);
int (*server_session_info)(struct mod *v, const char *data, int (*server_session_info)(struct mod *v, const char *data,
int data_bytes); int data_bytes);
tintptr server_dumby[100 - 47]; /* align, 100 minus the number of server tintptr server_dumby[100 - 48]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as long */ tintptr handle; /* pointer to self as long */

View File

@ -7,6 +7,57 @@
#include "test_common.h" #include "test_common.h"
// Max supported scancode value
#define MAX_SUPPORTED_SCANCODE 0x2ff
// Checks conversions to-and-from scancode indexes
START_TEST(test_scancode__scancode_to_index)
{
int i;
// In the range 0x00 - 0x7f, scancodes are the same as indexes
for (i = 0x0; i <= 0x7f; ++i)
{
ck_assert_int_eq(scancode_to_index(i), i);
ck_assert_int_eq(scancode_from_index(i), i);
}
// Scancodes from 0x80 - 0xff are not supported
for (i = 0x80; i <= 0xff; ++i)
{
ck_assert_int_eq(scancode_to_index(i), -1);
}
// 0x100 - 0x177 map to 0x80 - 0xf7
for (i = 0x100; i <= 0x177; ++i)
{
ck_assert_int_eq(scancode_to_index(i), i - 0x80);
ck_assert_int_eq(scancode_from_index(i - 0x80), i);
}
// Scancodes from 0x178 - 0x1ff are not supported
for (i = 0x178; i <= 0x1ff; ++i)
{
ck_assert_int_eq(scancode_to_index(i), -1);
}
// In the range 0x200 up, only SCANCODE_PAUSE_KEY is
// supported
ck_assert_int_ge(SCANCODE_PAUSE_KEY, 0x200);
ck_assert_int_le(SCANCODE_PAUSE_KEY, MAX_SUPPORTED_SCANCODE);
for (i = 0x200; i <= MAX_SUPPORTED_SCANCODE; ++i)
{
if (i == SCANCODE_PAUSE_KEY)
{
ck_assert_int_eq(scancode_to_index(i), SCANCODE_INDEX_PAUSE_KEY);
ck_assert_int_eq(scancode_from_index(SCANCODE_INDEX_PAUSE_KEY), i);
}
else
{
ck_assert_int_eq(scancode_to_index(i), -1);
}
}
}
// Checks all returned evdev scancodes are mapped to a keycode // Checks all returned evdev scancodes are mapped to a keycode
START_TEST(test_scancode__keycode_sets) START_TEST(test_scancode__keycode_sets)
{ {
@ -31,7 +82,9 @@ START_TEST(test_scancode__evdev_all_values_returned)
iter = 0; iter = 0;
while ((scancode = scancode_get_next(&iter)) != 0) while ((scancode = scancode_get_next(&iter)) != 0)
{ {
unsigned short keycode = scancode_to_keycode(scancode); ck_assert_int_ge(scancode, 0);
ck_assert_int_le(scancode, MAX_SUPPORTED_SCANCODE);
unsigned short keycode = scancode_to_x11_keycode(scancode);
ck_assert_int_ne(keycode, 0); ck_assert_int_ne(keycode, 0);
} }
} }
@ -40,8 +93,8 @@ END_TEST
// Checks all invalid evdev scancodes return 0 // Checks all invalid evdev scancodes return 0
START_TEST(test_scancode__evdev_bad_values_mapped_to_0) START_TEST(test_scancode__evdev_bad_values_mapped_to_0)
{ {
// Store valid scancodes which are between 0 and 0x1ff // Store valid scancodes which are between 0 and MAX_SUPPORTED_SCANCODE
int valid[512] = {0}; char valid[MAX_SUPPORTED_SCANCODE + 1] = {0};
unsigned int iter; unsigned int iter;
unsigned int scancode; unsigned int scancode;
@ -50,14 +103,16 @@ START_TEST(test_scancode__evdev_bad_values_mapped_to_0)
iter = 0; iter = 0;
while ((scancode = scancode_get_next(&iter)) != 0) while ((scancode = scancode_get_next(&iter)) != 0)
{ {
ck_assert_int_ge(scancode, 0);
ck_assert_int_le(scancode, MAX_SUPPORTED_SCANCODE);
valid[scancode] = 1; valid[scancode] = 1;
} }
for (scancode = 0 ; scancode < 512; ++scancode) for (scancode = 0 ; scancode <= MAX_SUPPORTED_SCANCODE; ++scancode)
{ {
if (!valid[scancode]) if (!valid[scancode])
{ {
ck_assert_int_eq(scancode_to_keycode(scancode), 0); ck_assert_int_eq(scancode_to_x11_keycode(scancode), 0);
} }
} }
} }
@ -74,7 +129,9 @@ START_TEST(test_scancode__base_all_values_returned)
iter = 0; iter = 0;
while ((scancode = scancode_get_next(&iter)) != 0) while ((scancode = scancode_get_next(&iter)) != 0)
{ {
unsigned short keycode = scancode_to_keycode(scancode); ck_assert_int_ge(scancode, 0);
ck_assert_int_le(scancode, MAX_SUPPORTED_SCANCODE);
unsigned short keycode = scancode_to_x11_keycode(scancode);
ck_assert_int_ne(keycode, 0); ck_assert_int_ne(keycode, 0);
} }
} }
@ -83,8 +140,8 @@ END_TEST
// Checks all invalid base scancodes return 0 // Checks all invalid base scancodes return 0
START_TEST(test_scancode__base_bad_values_mapped_to_0) START_TEST(test_scancode__base_bad_values_mapped_to_0)
{ {
// Store valid scancodes which are between 0 and 0x1ff // Store valid scancodes which are between 0 and MAX_SUPPORTED_SCANCODE
int valid[512] = {0}; char valid[MAX_SUPPORTED_SCANCODE + 1] = {0};
unsigned int iter; unsigned int iter;
unsigned int scancode; unsigned int scancode;
@ -93,14 +150,16 @@ START_TEST(test_scancode__base_bad_values_mapped_to_0)
iter = 0; iter = 0;
while ((scancode = scancode_get_next(&iter)) != 0) while ((scancode = scancode_get_next(&iter)) != 0)
{ {
ck_assert_int_ge(scancode, 0);
ck_assert_int_le(scancode, MAX_SUPPORTED_SCANCODE);
valid[scancode] = 1; valid[scancode] = 1;
} }
for (scancode = 0 ; scancode < 512; ++scancode) for (scancode = 0 ; scancode <= MAX_SUPPORTED_SCANCODE; ++scancode)
{ {
if (!valid[scancode]) if (!valid[scancode])
{ {
ck_assert_int_eq(scancode_to_keycode(scancode), 0); ck_assert_int_eq(scancode_to_x11_keycode(scancode), 0);
} }
} }
} }
@ -118,6 +177,7 @@ make_suite_test_scancode(void)
tc = tcase_create("scancode"); tc = tcase_create("scancode");
suite_add_tcase(s, tc); suite_add_tcase(s, tc);
tcase_add_test(tc, test_scancode__scancode_to_index);
tcase_add_test(tc, test_scancode__keycode_sets); tcase_add_test(tc, test_scancode__keycode_sets);
tcase_add_test(tc, test_scancode__evdev_all_values_returned); tcase_add_test(tc, test_scancode__evdev_all_values_returned);
tcase_add_test(tc, test_scancode__evdev_bad_values_mapped_to_0); tcase_add_test(tc, test_scancode__evdev_bad_values_mapped_to_0);

View File

@ -5,6 +5,8 @@ AM_CPPFLAGS = \
-DXRDP_PID_PATH=\"${localstatedir}/run\" \ -DXRDP_PID_PATH=\"${localstatedir}/run\" \
-I$(top_srcdir)/common -I$(top_srcdir)/common
AM_CFLAGS = $(X_CFLAGS)
module_LTLIBRARIES = \ module_LTLIBRARIES = \
libvnc.la libvnc.la

115
vnc/vnc.c
View File

@ -30,6 +30,8 @@
#include <config_ac.h> #include <config_ac.h>
#endif #endif
#include <X11/keysym.h>
#include "vnc.h" #include "vnc.h"
#include "vnc_clip.h" #include "vnc_clip.h"
#include "rfb.h" #include "rfb.h"
@ -443,13 +445,90 @@ resize_server_to_client_layout(struct vnc *v)
return error; return error;
} }
/*****************************************************************************/
/**
* Process keysym messages
* @param v Module
* @param keysym Keysym of keypress
* @param keydown boolean - is key down?
* @return != 0 for error
*/
static int
process_keysym_msg(struct vnc *v, int keysym, int keydown)
{
struct stream *s = NULL;
int error = 0;
if (keysym > 0)
{
make_stream(s);
/* Break key processing [MS-RDPBCGR] 2.2.8.1.1.3.1.1.1 */
if (v->ignore_next_numlock)
{
v->ignore_next_numlock = 0;
if (keysym == XK_Num_Lock)
{
goto end_keysym_msg;
}
}
if (keysym == XK_ISO_Level3_Shift) /* altgr */
{
if (v->shift_state)
{
/* fix for mstsc sending left control down with altgr */
init_stream(s, 64);
out_uint8(s, RFB_C2S_KEY_EVENT);
out_uint8(s, 0); /* down flag */
out_uint8s(s, 2);
out_uint32_be(s, XK_Control_L); /* left control */
s_mark_end(s);
error = lib_send_copy(v, s);
if (error != 0)
{
goto end_keysym_msg;
}
}
}
init_stream(s, 64);
out_uint8(s, RFB_C2S_KEY_EVENT);
out_uint8(s, keydown ? 1 : 0);
out_uint8s(s, 2);
out_uint32_be(s, keysym);
s_mark_end(s);
error = lib_send_copy(v, s);
switch (keysym)
{
case XK_Control_L: /* left control */
v->shift_state = keydown;
break;
case XK_Pause:
// [MS-RDPBCGR] 2.2.8.1.1.3.1.1.1 - A pause key scancode
// (up or down) is always immediately followed by a
// numlock key which we should ignore
v->ignore_next_numlock = 1;
break;
default:
break;
}
}
end_keysym_msg:
free_stream(s);
return error;
}
/*****************************************************************************/ /*****************************************************************************/
static int static int
lib_mod_event(struct vnc *v, int msg, long param1, long param2, lib_mod_event(struct vnc *v, int msg, long param1, long param2,
long param3, long param4) long param3, long param4)
{ {
struct stream *s; struct stream *s;
int key;
int error; int error;
int x; int x;
int y; int y;
@ -492,38 +571,7 @@ lib_mod_event(struct vnc *v, int msg, long param1, long param2,
} }
else if ((msg >= 15) && (msg <= 16)) /* key events */ else if ((msg >= 15) && (msg <= 16)) /* key events */
{ {
key = param2; error = process_keysym_msg(v, param2, (msg == 15));
if (key > 0)
{
if (key == 65027) /* altgr */
{
if (v->shift_state)
{
/* fix for mstsc sending left control down with altgr */
init_stream(s, 8192);
out_uint8(s, RFB_C2S_KEY_EVENT);
out_uint8(s, 0); /* down flag */
out_uint8s(s, 2);
out_uint32_be(s, 65507); /* left control */
s_mark_end(s);
lib_send_copy(v, s);
}
}
init_stream(s, 8192);
out_uint8(s, RFB_C2S_KEY_EVENT);
out_uint8(s, msg == 15); /* down flag */
out_uint8s(s, 2);
out_uint32_be(s, key);
s_mark_end(s);
error = lib_send_copy(v, s);
if (key == 65507) /* left control */
{
v->shift_state = msg == 15;
}
}
} }
/* mouse events /* mouse events
* *
@ -613,7 +661,6 @@ lib_mod_event(struct vnc *v, int msg, long param1, long param2,
error = lib_send_copy(v, s); error = lib_send_copy(v, s);
} }
} }
free_stream(s); free_stream(s);
return error; return error;
} }

View File

@ -69,6 +69,7 @@ enum vnc_resize_support_status
}; };
struct source_info; struct source_info;
struct xrdp_client_info;
/* Defined in vnc_clip.c */ /* Defined in vnc_clip.c */
struct vnc_clipboard_data; struct vnc_clipboard_data;
@ -151,7 +152,9 @@ struct vnc
int total_data_len, int flags); int total_data_len, int flags);
int (*server_bell_trigger)(struct vnc *v); int (*server_bell_trigger)(struct vnc *v);
int (*server_chansrv_in_use)(struct vnc *v); int (*server_chansrv_in_use)(struct vnc *v);
tintptr server_dumby[100 - 28]; /* align, 100 minus the number of server void (*server_init_xkb_layout)(struct vnc *v,
struct xrdp_client_info *client_info);
tintptr server_dumby[100 - 29]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as long */ tintptr handle; /* pointer to self as long */
@ -170,6 +173,7 @@ struct vnc
char port[256]; char port[256];
int sck_closed; int sck_closed;
int shift_state; /* 0 up, 1 down */ int shift_state; /* 0 up, 1 down */
int ignore_next_numlock; /* Used in pause key processing */
int keylayout; int keylayout;
int clip_chanid; int clip_chanid;
struct vnc_clipboard_data *vc; struct vnc_clipboard_data *vc;

View File

@ -39,58 +39,62 @@
/*****************************************************************************/ /*****************************************************************************/
struct xrdp_key_info * struct xrdp_key_info *
get_key_info_from_scan_code(int device_flags, int scan_code, int *keys, get_key_info_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap) struct xrdp_keymap *keymap)
{ {
struct xrdp_key_info *rv; struct xrdp_key_info *rv;
int shift; int shift;
int altgr; int altgr;
int ext;
int index; int index;
ext = device_flags & KBD_FLAG_EXT; /* 0x0100 */ shift = keys[SCANCODE_INDEX_LSHIFT_KEY] || keys[SCANCODE_INDEX_RSHIFT_KEY];
shift = keys[42] || keys[54]; altgr = keys[SCANCODE_INDEX_RALT_KEY]; /* right alt */
altgr = keys[56] & KBD_FLAG_EXT; /* right alt */
rv = 0; rv = 0;
index = INDEX_FROM_SCANCODE(scan_code, ext);
if (num_lock && index = scancode_to_index(SCANCODE_FROM_KBD_EVENT(key_code, keyboard_flags));
index >= XR_RDP_SCAN_MIN_NUMLOCK && index <= XR_RDP_SCAN_MAX_NUMLOCK) if (index >= 0)
{ {
rv = &(keymap->keys_numlock[index - XR_RDP_SCAN_MIN_NUMLOCK]); // scancode_to_index() guarantees to map numlock scancodes
} // to the same index values.
else if (shift && caps_lock && altgr) if (num_lock &&
{ index >= SCANCODE_MIN_NUMLOCK &&
rv = &(keymap->keys_shiftcapslockaltgr[index]); index <= SCANCODE_MAX_NUMLOCK)
} {
else if (shift && caps_lock) rv = &(keymap->keys_numlock[index - SCANCODE_MIN_NUMLOCK]);
{ }
rv = &(keymap->keys_shiftcapslock[index]); else if (shift && caps_lock && altgr)
} {
else if (shift && altgr) rv = &(keymap->keys_shiftcapslockaltgr[index]);
{ }
rv = &(keymap->keys_shiftaltgr[index]); else if (shift && caps_lock)
} {
else if (shift) rv = &(keymap->keys_shiftcapslock[index]);
{ }
rv = &(keymap->keys_shift[index]); else if (shift && altgr)
} {
else if (caps_lock && altgr) rv = &(keymap->keys_shiftaltgr[index]);
{ }
rv = &(keymap->keys_capslockaltgr[index]); else if (shift)
} {
else if (caps_lock) rv = &(keymap->keys_shift[index]);
{ }
rv = &(keymap->keys_capslock[index]); else if (caps_lock && altgr)
} {
else if (altgr) rv = &(keymap->keys_capslockaltgr[index]);
{ }
rv = &(keymap->keys_altgr[index]); else if (caps_lock)
} {
else rv = &(keymap->keys_capslock[index]);
{ }
rv = &(keymap->keys_noshift[index]); else if (altgr)
{
rv = &(keymap->keys_altgr[index]);
}
else
{
rv = &(keymap->keys_noshift[index]);
}
} }
return rv; return rv;
@ -98,13 +102,13 @@ get_key_info_from_scan_code(int device_flags, int scan_code, int *keys,
/*****************************************************************************/ /*****************************************************************************/
int int
get_keysym_from_scan_code(int device_flags, int scan_code, int *keys, get_keysym_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap) struct xrdp_keymap *keymap)
{ {
struct xrdp_key_info *ki; struct xrdp_key_info *ki;
ki = get_key_info_from_scan_code(device_flags, scan_code, keys, ki = get_key_info_from_kbd_event(keyboard_flags, key_code, keys,
caps_lock, num_lock, scroll_lock, caps_lock, num_lock, scroll_lock,
keymap); keymap);
@ -118,13 +122,13 @@ get_keysym_from_scan_code(int device_flags, int scan_code, int *keys,
/*****************************************************************************/ /*****************************************************************************/
char32_t char32_t
get_char_from_scan_code(int device_flags, int scan_code, int *keys, get_char_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap) struct xrdp_keymap *keymap)
{ {
struct xrdp_key_info *ki; struct xrdp_key_info *ki;
ki = get_key_info_from_scan_code(device_flags, scan_code, keys, ki = get_key_info_from_kbd_event(keyboard_flags, key_code, keys,
caps_lock, num_lock, scroll_lock, caps_lock, num_lock, scroll_lock,
keymap); keymap);
@ -138,28 +142,34 @@ get_char_from_scan_code(int device_flags, int scan_code, int *keys,
/*****************************************************************************/ /*****************************************************************************/
/** /**
* Tests a table key to see if it's a valid scancode * Converts a table key to a scancode index value
* *
* @param key Table key * @param key Table key
* @param[out] scancode scancode index value (0..255) if 1 is returned * @return index >= 0, or < 0 for an invalid key
* @return Boolean != 0 if the key is valid
*/ */
static int static int
is_valid_scancode(const char *key, int *scancode) key_to_scancode_index(const char *key)
{ {
int rv = 0; int rv = -1;
int extended = 0; int keyboard_flags = 0;
if ((key[0] == 'E' || key[0] == 'e') && key[1] == '0' && key[2] == '_') if ((key[0] == 'E' || key[0] == 'e') && key[2] == '_')
{ {
extended = 1; if (key[1] == '0')
key += 3; {
keyboard_flags |= KBDFLAGS_EXTENDED;
key += 3;
}
else if (key[1] == '1')
{
keyboard_flags |= KBDFLAGS_EXTENDED1;
key += 3;
}
} }
if (isxdigit(key[0]) && isxdigit(key[1]) && key[2] == '\0') if (isxdigit(key[0]) && isxdigit(key[1]) && key[2] == '\0')
{ {
rv = 1; int code = XDIGIT_TO_VAL(key[0]) * 16 + XDIGIT_TO_VAL(key[1]);
*scancode = XDIGIT_TO_VAL(key[0]) * 16 + XDIGIT_TO_VAL(key[1]); rv = scancode_to_index(SCANCODE_FROM_KBD_EVENT(code, keyboard_flags));
*scancode = INDEX_FROM_SCANCODE(*scancode, extended);
} }
return rv; return rv;
} }
@ -248,13 +258,14 @@ km_read_section(toml_table_t *tfile, const char *section_name,
{ {
const char *key; const char *key;
toml_datum_t val; toml_datum_t val;
int index; int i;
int scancode; // index value 0..255
char *p; char *p;
const char *unicode_str; const char *unicode_str;
for (index = 0 ; (key = toml_key_in(section, index)) != NULL; ++index) for (i = 0 ; (key = toml_key_in(section, i)) != NULL; ++i)
{ {
if (!is_valid_scancode(key, &scancode)) // Get a scancode index from the key if possible
int sindex = key_to_scancode_index(key);
if (sindex < 0)
{ {
LOG(LOG_LEVEL_WARNING, LOG(LOG_LEVEL_WARNING,
"Can't parse value '%s' in [%s] in keymap file", "Can't parse value '%s' in [%s] in keymap file",
@ -283,7 +294,7 @@ km_read_section(toml_table_t *tfile, const char *section_name,
/* Parse both values and add them to the keymap, logging any /* Parse both values and add them to the keymap, logging any
* errors */ * errors */
if (!is_valid_keysym(val.u.s, &keymap[scancode].sym)) if (!is_valid_keysym(val.u.s, &keymap[sindex].sym))
{ {
LOG(LOG_LEVEL_WARNING, LOG(LOG_LEVEL_WARNING,
"Can't read KeySym for [%s]:%s in keymap file", "Can't read KeySym for [%s]:%s in keymap file",
@ -291,7 +302,7 @@ km_read_section(toml_table_t *tfile, const char *section_name,
} }
if (unicode_str != NULL && if (unicode_str != NULL &&
!is_valid_unicode_char(unicode_str, &keymap[scancode].chr)) !is_valid_unicode_char(unicode_str, &keymap[sindex].chr))
{ {
LOG(LOG_LEVEL_WARNING, LOG(LOG_LEVEL_WARNING,
"Can't read unicode character for [%s]:%s in keymap file", "Can't read unicode character for [%s]:%s in keymap file",
@ -383,19 +394,19 @@ km_load_file(const char *filename, struct xrdp_keymap *keymap)
keymap->keys_shiftcapslockaltgr); keymap->keys_shiftcapslockaltgr);
/* The numlock map is much smaller and offset by /* The numlock map is much smaller and offset by
* XR_RDP_SCAN_MAX_NUMLOCK. Read the section into a temporary * SCANCODE_MIX_NUMLOCK. Read the section into a temporary
* area and copy it over */ * area and copy it over */
struct xrdp_key_info keys_numlock[256]; struct xrdp_key_info keys_numlock[SCANCODE_MAX_INDEX + 1];
int i; int i;
for (i = XR_RDP_SCAN_MIN_NUMLOCK; i <= XR_RDP_SCAN_MAX_NUMLOCK; ++i) for (i = SCANCODE_MIN_NUMLOCK; i <= SCANCODE_MAX_NUMLOCK; ++i)
{ {
keys_numlock[i].sym = 0; keys_numlock[i].sym = 0;
keys_numlock[i].chr = 0; keys_numlock[i].chr = 0;
} }
km_read_section(tfile, "numlock", keys_numlock); km_read_section(tfile, "numlock", keys_numlock);
for (i = XR_RDP_SCAN_MIN_NUMLOCK; i <= XR_RDP_SCAN_MAX_NUMLOCK; ++i) for (i = SCANCODE_MIN_NUMLOCK; i <= SCANCODE_MAX_NUMLOCK; ++i)
{ {
keymap->keys_numlock[i - XR_RDP_SCAN_MIN_NUMLOCK] = keys_numlock[i]; keymap->keys_numlock[i - SCANCODE_MIN_NUMLOCK] = keys_numlock[i];
} }
toml_free(tfile); toml_free(tfile);
@ -403,3 +414,253 @@ km_load_file(const char *filename, struct xrdp_keymap *keymap)
return rv; return rv;
} }
/*****************************************************************************/
void
xrdp_init_xkb_layout(struct xrdp_client_info *client_info)
{
int fd;
int index = 0;
int bytes;
struct list *names = (struct list *)NULL;
struct list *items = (struct list *)NULL;
struct list *values = (struct list *)NULL;
char *item = (char *)NULL;
char *value = (char *)NULL;
char *q = (char *)NULL;
char keyboard_cfg_file[256] = { 0 };
char rdp_layout[256] = { 0 };
const struct xrdp_keyboard_overrides *ko =
&client_info->xrdp_keyboard_overrides;
LOG(LOG_LEVEL_INFO, "xrdp_init_xkb_layout: Keyboard information sent"
" by the RDP client, keyboard_type:[0x%02X], keyboard_subtype:[0x%02X],"
" keylayout:[0x%08X]",
client_info->keyboard_type, client_info->keyboard_subtype,
client_info->keylayout);
if (ko->type != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keyboard_type 0x%02X"
" with 0x%02X", client_info->keyboard_type, ko->type);
client_info->keyboard_type = ko->type;
}
if (ko->subtype != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keyboard_subtype 0x%02X"
" with 0x%02X", client_info->keyboard_subtype,
ko->subtype);
client_info->keyboard_subtype = ko->subtype;
}
if (ko->layout != -1)
{
LOG(LOG_LEVEL_INFO, "overrode keylayout 0x%08X"
" with 0x%08X", client_info->keylayout, ko->layout);
client_info->keylayout = ko->layout;
}
/* infer model/variant */
/* TODO specify different X11 keyboard models/variants */
g_memset(client_info->model, 0, sizeof(client_info->model));
g_memset(client_info->variant, 0, sizeof(client_info->variant));
g_strncpy(client_info->layout, "us", sizeof(client_info->layout) - 1);
if (client_info->keyboard_subtype == 3)
{
/* macintosh keyboard */
bytes = sizeof(client_info->variant);
g_strncpy(client_info->variant, "mac", bytes - 1);
}
else if (client_info->keyboard_subtype == 0)
{
/* default - standard subtype */
client_info->keyboard_subtype = 1;
}
g_snprintf(keyboard_cfg_file, 255, "%s/xrdp_keyboard.ini", XRDP_CFG_PATH);
LOG(LOG_LEVEL_DEBUG, "keyboard_cfg_file %s", keyboard_cfg_file);
fd = g_file_open_ro(keyboard_cfg_file);
if (fd >= 0)
{
int section_found = -1;
char section_rdp_layouts[256] = { 0 };
char section_layouts_map[256] = { 0 };
names = list_create();
names->auto_free = 1;
items = list_create();
items->auto_free = 1;
values = list_create();
values->auto_free = 1;
file_read_sections(fd, names);
for (index = 0; index < names->count; index++)
{
q = (char *)list_get_item(names, index);
if (g_strncasecmp("default", q, 8) != 0)
{
int i;
file_read_section(fd, q, items, values);
for (i = 0; i < items->count; i++)
{
item = (char *)list_get_item(items, i);
value = (char *)list_get_item(values, i);
LOG(LOG_LEVEL_DEBUG, "xrdp_init_xkb_layout: item %s value %s",
item, value);
if (g_strcasecmp(item, "keyboard_type") == 0)
{
int v = g_atoi(value);
if (v == client_info->keyboard_type)
{
section_found = index;
}
}
else if (g_strcasecmp(item, "keyboard_subtype") == 0)
{
int v = g_atoi(value);
if (v != client_info->keyboard_subtype &&
section_found == index)
{
section_found = -1;
break;
}
}
else if (g_strcasecmp(item, "rdp_layouts") == 0)
{
if (section_found != -1 && section_found == index)
{
g_strncpy(section_rdp_layouts, value, 255);
}
}
else if (g_strcasecmp(item, "layouts_map") == 0)
{
if (section_found != -1 && section_found == index)
{
g_strncpy(section_layouts_map, value, 255);
}
}
else if (g_strcasecmp(item, "model") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->model);
g_memset(client_info->model, 0, bytes);
g_strncpy(client_info->model, value, bytes - 1);
}
}
else if (g_strcasecmp(item, "variant") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->variant);
g_memset(client_info->variant, 0, bytes);
g_strncpy(client_info->variant, value, bytes - 1);
}
}
else if (g_strcasecmp(item, "options") == 0)
{
if (section_found != -1 && section_found == index)
{
bytes = sizeof(client_info->options);
g_memset(client_info->options, 0, bytes);
g_strncpy(client_info->options, value, bytes - 1);
}
}
else
{
/*
* mixing items from different sections will result in
* skipping over current section.
*/
LOG(LOG_LEVEL_DEBUG, "xrdp_init_xkb_layout: skipping "
"configuration item - %s, continuing to next "
"section", item);
break;
}
}
list_clear(items);
list_clear(values);
}
}
if (section_found == -1)
{
g_memset(section_rdp_layouts, 0, sizeof(char) * 256);
g_memset(section_layouts_map, 0, sizeof(char) * 256);
// read default section
file_read_section(fd, "default", items, values);
for (index = 0; index < items->count; index++)
{
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
if (g_strcasecmp(item, "rdp_layouts") == 0)
{
g_strncpy(section_rdp_layouts, value, 255);
}
else if (g_strcasecmp(item, "layouts_map") == 0)
{
g_strncpy(section_layouts_map, value, 255);
}
}
list_clear(items);
list_clear(values);
}
/* load the map */
file_read_section(fd, section_rdp_layouts, items, values);
for (index = 0; index < items->count; index++)
{
int rdp_layout_id;
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
rdp_layout_id = g_htoi(value);
if (rdp_layout_id == client_info->keylayout)
{
g_strncpy(rdp_layout, item, 255);
break;
}
}
list_clear(items);
list_clear(values);
file_read_section(fd, section_layouts_map, items, values);
for (index = 0; index < items->count; index++)
{
item = (char *)list_get_item(items, index);
value = (char *)list_get_item(values, index);
if (g_strcasecmp(item, rdp_layout) == 0)
{
bytes = sizeof(client_info->layout);
g_strncpy(client_info->layout, value, bytes - 1);
break;
}
}
list_delete(names);
list_delete(items);
list_delete(values);
LOG(LOG_LEVEL_INFO, "xrdp_init_xkb_layout: model [%s] variant [%s] "
"layout [%s] options [%s]", client_info->model,
client_info->variant, client_info->layout, client_info->options);
g_file_close(fd);
}
else
{
LOG(LOG_LEVEL_ERROR, "xrdp_init_xkb_layout: error opening %s",
keyboard_cfg_file);
}
// Initialise the rules and a few keycodes for xorgxrdp
snprintf(client_info->xkb_rules, sizeof(client_info->xkb_rules),
"%s", scancode_get_xkb_rules());
client_info->x11_keycode_caps_lock =
scancode_to_x11_keycode(SCANCODE_CAPS_KEY);
client_info->x11_keycode_num_lock =
scancode_to_x11_keycode(SCANCODE_NUMLOCK_KEY);
client_info->x11_keycode_scroll_lock =
scancode_to_x11_keycode(SCANCODE_SCROLL_KEY);
}

View File

@ -147,8 +147,14 @@ int
xrdp_wm_mouse_touch(struct xrdp_wm *self, int gesture, int param); xrdp_wm_mouse_touch(struct xrdp_wm *self, int gesture, int param);
int int
xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down); xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down);
/**
* Handle a TS_KEYBOARD_EVENT ([MS-RDPBCGR] 2.2.8.1.1.3.1.1.1)
*
* @param device_flags keyboardFlags value from PDU
* @param key_code keyCode value from PDU
*/
int int
xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code); xrdp_wm_key(struct xrdp_wm *self, int keyboard_flags, int key_code);
int int
xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags); xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
int int
@ -424,15 +430,15 @@ set_string(char **in_str, const char *in);
/* in lang.c */ /* in lang.c */
struct xrdp_key_info * struct xrdp_key_info *
get_key_info_from_scan_code(int device_flags, int scan_code, int *keys, get_key_info_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap); struct xrdp_keymap *keymap);
int int
get_keysym_from_scan_code(int device_flags, int scan_code, int *keys, get_keysym_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap); struct xrdp_keymap *keymap);
char32_t char32_t
get_char_from_scan_code(int device_flags, int scan_code, int *keys, get_char_from_kbd_event(int keyboard_flags, int key_code, int *keys,
int caps_lock, int num_lock, int scroll_lock, int caps_lock, int num_lock, int scroll_lock,
struct xrdp_keymap *keymap); struct xrdp_keymap *keymap);
int int
@ -441,6 +447,19 @@ get_keymaps(int keylayout, struct xrdp_keymap *keymap);
int int
km_load_file(const char *filename, struct xrdp_keymap *keymap); km_load_file(const char *filename, struct xrdp_keymap *keymap);
/**
* initialise the XKB layout
*
* Not all backends need to use XKB for keyboard mapping. This
* call is used by those modules that do need an XKB mapping.
*
* Other modules and the login screen use other routines in
* lang.c to interpret incoming RDP scancodes
* @param client_info Client info struct to initialise
*/
void
xrdp_init_xkb_layout(struct xrdp_client_info *client_info);
/* xrdp_login_wnd.c */ /* xrdp_login_wnd.c */
/** /**
* Gets the DPI of the login (primary) monitor * Gets the DPI of the login (primary) monitor
@ -522,6 +541,9 @@ int
server_bell_trigger(struct xrdp_mod *mod); server_bell_trigger(struct xrdp_mod *mod);
int int
server_chansrv_in_use(struct xrdp_mod *mod); server_chansrv_in_use(struct xrdp_mod *mod);
void
server_init_xkb_layout(struct xrdp_mod *mod,
struct xrdp_client_info *client_info);
int int
server_fill_rect(struct xrdp_mod *mod, int x, int y, int cx, int cy); server_fill_rect(struct xrdp_mod *mod, int x, int y, int cx, int cy);
int int

View File

@ -248,6 +248,7 @@ username=ask
password=ask password=ask
port=-1 port=-1
code=20 code=20
#keycode_set=evdev
[Xvnc] [Xvnc]
name=Xvnc name=Xvnc

View File

@ -1024,9 +1024,6 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
{ {
int n; int n;
int i; int i;
int shift;
int ext;
int scan_code;
struct xrdp_bitmap *b; struct xrdp_bitmap *b;
struct xrdp_bitmap *focus_out_control; struct xrdp_bitmap *focus_out_control;
@ -1044,12 +1041,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
{ {
if (msg == WM_KEYDOWN) if (msg == WM_KEYDOWN)
{ {
scan_code = param1 % 128; int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
int shift = self->wm->keys[SCANCODE_INDEX_LSHIFT_KEY] ||
self->wm->keys[SCANCODE_INDEX_RSHIFT_KEY];
if (scan_code == 15) /* tab */ if (scan_code == SCANCODE_TAB_KEY) /* tab */
{ {
/* move to next tab stop */ /* move to next tab stop */
shift = self->wm->keys[42] || self->wm->keys[54];
i = -1; i = -1;
if (self->child_list != 0) if (self->child_list != 0)
@ -1114,7 +1112,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
} }
else if (scan_code == 28) /* enter */ else if (scan_code == SCANCODE_ENTER_KEY ||
scan_code == SCANCODE_KP_ENTER_KEY)
{ {
if (self->default_button != 0) if (self->default_button != 0)
{ {
@ -1126,7 +1125,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
} }
else if (scan_code == 1) /* esc */ else if (scan_code == SCANCODE_ESC_KEY)
{ {
if (self->esc_button != 0) if (self->esc_button != 0)
{ {
@ -1149,12 +1148,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
{ {
if (msg == WM_KEYDOWN) if (msg == WM_KEYDOWN)
{ {
scan_code = param1 % 128; int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
ext = param2 & 0x0100; int num_lock = self->wm->num_lock;
/* left or up arrow */ /* left or up arrow */
if ((scan_code == 75 || scan_code == 72) && if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
(ext || self->wm->num_lock == 0)) (scan_code == SCANCODE_UP_ARROW_KEY) ||
(!num_lock && (scan_code == SCANCODE_KP_4_KEY)) ||
(!num_lock && (scan_code == SCANCODE_KP_8_KEY)))
{ {
if (self->edit_pos > 0) if (self->edit_pos > 0)
{ {
@ -1163,8 +1163,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* right or down arrow */ /* right or down arrow */
else if ((scan_code == 77 || scan_code == 80) && else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
(ext || self->wm->num_lock == 0)) (scan_code == SCANCODE_DOWN_ARROW_KEY) ||
(!num_lock && (scan_code == SCANCODE_KP_6_KEY)) ||
(!num_lock && (scan_code == SCANCODE_KP_2_KEY)))
{ {
if (self->edit_pos < (int)utf8_char_count(self->caption1)) if (self->edit_pos < (int)utf8_char_count(self->caption1))
{ {
@ -1173,7 +1175,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* backspace */ /* backspace */
else if (scan_code == 14) else if (scan_code == SCANCODE_BACKSPACE_KEY)
{ {
n = utf8_char_count(self->caption1); n = utf8_char_count(self->caption1);
@ -1188,8 +1190,9 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* delete */ /* delete */
else if (scan_code == 83 && else if ((scan_code == SCANCODE_DEL_KEY) ||
(ext || self->wm->num_lock == 0)) (!num_lock && (scan_code == SCANCODE_KP_DEL_KEY)))
{ {
n = utf8_char_count(self->caption1); n = utf8_char_count(self->caption1);
@ -1203,8 +1206,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* end */ /* end */
else if (scan_code == 79 && else if ((scan_code == SCANCODE_END_KEY) ||
(ext || self->wm->num_lock == 0)) (!num_lock && (scan_code == SCANCODE_KP_1_KEY)))
{ {
n = utf8_char_count(self->caption1); n = utf8_char_count(self->caption1);
@ -1215,8 +1218,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* home */ /* home */
else if ((scan_code == 71) && else if ((scan_code == SCANCODE_HOME_KEY) ||
(ext || (self->wm->num_lock == 0))) (!num_lock && (scan_code == SCANCODE_KP_7_KEY)))
{ {
if (self->edit_pos > 0) if (self->edit_pos > 0)
{ {
@ -1226,8 +1229,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
else else
{ {
char32_t c = get_char_from_scan_code char32_t c = get_char_from_kbd_event
(param2, scan_code, self->wm->keys, self->wm->caps_lock, (param2, param1, self->wm->keys, self->wm->caps_lock,
self->wm->num_lock, self->wm->scroll_lock, self->wm->num_lock, self->wm->scroll_lock,
&(self->wm->keymap)); &(self->wm->keymap));
// Add a printing character to the string. If successful, // Add a printing character to the string. If successful,
@ -1245,12 +1248,14 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
{ {
if (msg == WM_KEYDOWN) if (msg == WM_KEYDOWN)
{ {
scan_code = param1 % 128; int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
ext = param2 & 0x0100; int num_lock = self->wm->num_lock;
/* left or up arrow */ /* left or up arrow */
if (((scan_code == 75) || (scan_code == 72)) && if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
(ext || (self->wm->num_lock == 0))) (scan_code == SCANCODE_UP_ARROW_KEY) ||
(!num_lock && (scan_code == SCANCODE_KP_4_KEY)) ||
(!num_lock && (scan_code == SCANCODE_KP_8_KEY)))
{ {
if (self->item_index > 0) if (self->item_index > 0)
{ {
@ -1264,8 +1269,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
} }
} }
/* right or down arrow */ /* right or down arrow */
else if ((scan_code == 77 || scan_code == 80) && else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
(ext || self->wm->num_lock == 0)) (scan_code == SCANCODE_DOWN_ARROW_KEY) ||
(!num_lock && (scan_code == SCANCODE_KP_6_KEY)) ||
(!num_lock && (scan_code == SCANCODE_KP_2_KEY)))
{ {
if ((self->item_index + 1) < self->string_list->count) if ((self->item_index + 1) < self->string_list->count)
{ {

View File

@ -384,6 +384,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
self->mod->server_end_update = server_end_update; self->mod->server_end_update = server_end_update;
self->mod->server_bell_trigger = server_bell_trigger; self->mod->server_bell_trigger = server_bell_trigger;
self->mod->server_chansrv_in_use = server_chansrv_in_use; self->mod->server_chansrv_in_use = server_chansrv_in_use;
self->mod->server_init_xkb_layout = server_init_xkb_layout;
self->mod->server_fill_rect = server_fill_rect; self->mod->server_fill_rect = server_fill_rect;
self->mod->server_screen_blt = server_screen_blt; self->mod->server_screen_blt = server_screen_blt;
self->mod->server_paint_rect = server_paint_rect; self->mod->server_paint_rect = server_paint_rect;
@ -525,6 +526,18 @@ xrdp_mm_setup_mod2(struct xrdp_mm *self)
if (self->mod->mod_connect(self->mod) == 0) if (self->mod->mod_connect(self->mod) == 0)
{ {
rv = 0; /* connect success */ rv = 0; /* connect success */
// If we've received a recent TS_SYNC_EVENT, pass it on to
// the module so (e.g.) NumLock starts in the right state.
if (self->last_sync_saved)
{
int key_flags = self->last_sync_key_flags;
int device_flags = self->last_sync_device_flags;
self->last_sync_saved = 0;
self->mod->mod_event(self->mod, WM_KEYBRD_SYNC, key_flags,
device_flags, key_flags, device_flags);
}
} }
else else
{ {
@ -3986,6 +3999,15 @@ server_chansrv_in_use(struct xrdp_mod *mod)
return wm->mm->use_chansrv; return wm->mm->use_chansrv;
} }
/*****************************************************************************/
/* Init the XKB layout */
void
server_init_xkb_layout(struct xrdp_mod *mod,
struct xrdp_client_info *client_info)
{
xrdp_init_xkb_layout(client_info);
}
/*****************************************************************************/ /*****************************************************************************/
int int

View File

@ -28,6 +28,7 @@
#include "xrdp_constants.h" #include "xrdp_constants.h"
#include "fifo.h" #include "fifo.h"
#include "guid.h" #include "guid.h"
#include "scancode.h"
#include "xrdp_client_info.h" #include "xrdp_client_info.h"
#define MAX_NR_CHANNELS 16 #define MAX_NR_CHANNELS 16
@ -123,6 +124,8 @@ struct xrdp_mod
int total_data_len, int flags); int total_data_len, int flags);
int (*server_bell_trigger)(struct xrdp_mod *v); int (*server_bell_trigger)(struct xrdp_mod *v);
int (*server_chansrv_in_use)(struct xrdp_mod *v); int (*server_chansrv_in_use)(struct xrdp_mod *v);
void (*server_init_xkb_layout)(struct xrdp_mod *v,
struct xrdp_client_info *client_info);
/* off screen bitmaps */ /* off screen bitmaps */
int (*server_create_os_surface)(struct xrdp_mod *v, int rdpindex, int (*server_create_os_surface)(struct xrdp_mod *v, int rdpindex,
int width, int height); int width, int height);
@ -191,7 +194,7 @@ struct xrdp_mod
int (*server_egfx_cmd)(struct xrdp_mod *v, int (*server_egfx_cmd)(struct xrdp_mod *v,
char *cmd, int cmd_bytes, char *cmd, int cmd_bytes,
char *data, int data_bytes); char *data, int data_bytes);
tintptr server_dumby[100 - 50]; /* align, 100 minus the number of server tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as int */ tintptr handle; /* pointer to self as int */
@ -444,6 +447,10 @@ struct xrdp_mm
struct display_control_monitor_layout_data *resize_data; struct display_control_monitor_layout_data *resize_data;
struct list *resize_queue; struct list *resize_queue;
tbus resize_ready; tbus resize_ready;
/* Last sync event if a module isn't loaded */
int last_sync_saved;
int last_sync_key_flags;
int last_sync_device_flags;
}; };
struct xrdp_key_info struct xrdp_key_info
@ -452,28 +459,20 @@ struct xrdp_key_info
char32_t chr; char32_t chr;
}; };
/**
* Keyboard description
*
* Each section maps an RDP scancode to a KeySym and a Unicode
* character.
*/
#define INDEX_FROM_SCANCODE(scancode,extended) \
(((scancode) & 0x7f) | ((extended) ? 0x80 : 0))
struct xrdp_keymap struct xrdp_keymap
{ {
struct xrdp_key_info keys_noshift[256]; // These arrays are indexed by a return from scancode_to_index()
struct xrdp_key_info keys_shift[256]; struct xrdp_key_info keys_noshift[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_altgr[256]; struct xrdp_key_info keys_shift[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_shiftaltgr[256]; struct xrdp_key_info keys_altgr[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_capslock[256]; struct xrdp_key_info keys_shiftaltgr[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_capslockaltgr[256]; struct xrdp_key_info keys_capslock[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_shiftcapslock[256]; struct xrdp_key_info keys_capslockaltgr[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_shiftcapslockaltgr[256]; struct xrdp_key_info keys_shiftcapslock[SCANCODE_MAX_INDEX + 1];
struct xrdp_key_info keys_shiftcapslockaltgr[SCANCODE_MAX_INDEX + 1];
// NumLock is restricted to a much smaller set of keys // NumLock is restricted to a much smaller set of keys
struct xrdp_key_info keys_numlock[XR_RDP_SCAN_MAX_NUMLOCK - struct xrdp_key_info keys_numlock[SCANCODE_MAX_NUMLOCK -
XR_RDP_SCAN_MIN_NUMLOCK + 1]; SCANCODE_MIN_NUMLOCK + 1];
}; };
/* the window manager */ /* the window manager */
@ -554,11 +553,12 @@ struct xrdp_wm
int current_pointer; int current_pointer;
int mouse_x; int mouse_x;
int mouse_y; int mouse_y;
/* keyboard info */ /* keyboard info (indexed by a return from scancode_to_index()) */
int keys[256]; /* key states 0 up 1 down*/ int keys[SCANCODE_MAX_INDEX + 1]; /* key states 0 up 1 down*/
int caps_lock; int caps_lock;
int scroll_lock; int scroll_lock;
int num_lock; int num_lock;
/* Unicode input */ /* Unicode input */
int last_high_surrogate_key_up; int last_high_surrogate_key_up;
int last_high_surrogate_key_down; int last_high_surrogate_key_down;

View File

@ -1569,15 +1569,26 @@ xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down)
/*****************************************************************************/ /*****************************************************************************/
int int
xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code) xrdp_wm_key(struct xrdp_wm *self, int keyboard_flags, int key_code)
{ {
int msg; int msg;
struct xrdp_key_info *ki; struct xrdp_key_info *ki;
LOG_DEVEL(LOG_LEVEL_DEBUG, LOG_DEVEL(LOG_LEVEL_DEBUG,
"xrdp_wm_key: RDP scancode:0x%04x, flags: 0x%04x", "xrdp_wm_key: RDP key_code:0x%04x, keyboard_flags: 0x%04x",
scan_code, device_flags); key_code, keyboard_flags);
scan_code = scan_code % 128; int scancode = SCANCODE_FROM_KBD_EVENT(key_code, keyboard_flags);
int keyup = ((keyboard_flags & KBDFLAGS_RELEASE) != 0);
int sindex = scancode_to_index(scancode);
if (sindex < 0)
{
// The scancode doesn't map to an index, so we can't handle it here.
// Log this so we can investigate
LOG(LOG_LEVEL_WARNING, "Ignoring unusable scancode %x (%s)",
scancode, (keyup ? "up" : "down"));
return 0;
}
if (self->popup_wnd != 0) if (self->popup_wnd != 0)
{ {
@ -1585,32 +1596,25 @@ xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code)
return 0; return 0;
} }
// workaround odd shift behavior if (keyup)
// see https://github.com/neutrinolabs/xrdp/issues/397
if (scan_code == 42 && device_flags == (KBD_FLAG_UP | KBD_FLAG_EXT))
{ {
return 0; self->keys[sindex] = 0;
}
if (device_flags & KBD_FLAG_UP) /* 0x8000 */
{
self->keys[scan_code] = 0;
msg = WM_KEYUP; msg = WM_KEYUP;
} }
else /* key down */ else /* key down */
{ {
self->keys[scan_code] = 1 | device_flags; self->keys[sindex] = 1;
msg = WM_KEYDOWN; msg = WM_KEYDOWN;
switch (scan_code) switch (scancode)
{ {
case 58: case SCANCODE_CAPS_KEY:
self->caps_lock = !self->caps_lock; self->caps_lock = !self->caps_lock;
break; /* caps lock */ break; /* caps lock */
case 69: case SCANCODE_NUMLOCK_KEY:
self->num_lock = !self->num_lock; self->num_lock = !self->num_lock;
break; /* num lock */ break; /* num lock */
case 70: case SCANCODE_SCROLL_KEY:
self->scroll_lock = !self->scroll_lock; self->scroll_lock = !self->scroll_lock;
break; /* scroll lock */ break; /* scroll lock */
} }
@ -1618,24 +1622,28 @@ xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code)
if (self->mm->mod != 0) if (self->mm->mod != 0)
{ {
// Backend module loaded...
if (self->mm->mod->mod_event != 0) if (self->mm->mod->mod_event != 0)
{ {
ki = get_key_info_from_scan_code // ..and able to take events. Check the scancode maps to
(device_flags, scan_code, self->keys, self->caps_lock, // a real key in the currently loaded keymap
ki = get_key_info_from_kbd_event
(keyboard_flags, key_code, self->keys, self->caps_lock,
self->num_lock, self->scroll_lock, self->num_lock, self->scroll_lock,
&(self->keymap)); &(self->keymap));
if (ki != 0) if (ki != 0)
{ {
self->mm->mod->mod_event(self->mm->mod, msg, ki->chr, ki->sym, self->mm->mod->mod_event(self->mm->mod, msg, ki->chr, ki->sym,
scan_code, device_flags); key_code, keyboard_flags);
} }
} }
} }
else if (self->focused_window != 0) else if (self->focused_window != 0)
{ {
// Pass keypress on to a widget in the login window
xrdp_bitmap_def_proc(self->focused_window, xrdp_bitmap_def_proc(self->focused_window,
msg, scan_code, device_flags); msg, key_code, keyboard_flags);
} }
return 0; return 0;
@ -1665,13 +1673,18 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags)
self->caps_lock = 1; self->caps_lock = 1;
} }
if (self->mm->mod != 0) if (self->mm->mod != 0 && self->mm->mod->mod_event != 0)
{ {
if (self->mm->mod->mod_event != 0) self->mm->mod->mod_event(self->mm->mod, WM_KEYBRD_SYNC, key_flags,
{ device_flags, key_flags, device_flags);
self->mm->mod->mod_event(self->mm->mod, WM_KEYBRD_SYNC, key_flags, }
device_flags, key_flags, device_flags); else
} {
// Save the event for when the module is loaded
self->mm->last_sync_saved = 1;
self->mm->last_sync_key_flags = key_flags;
self->mm->last_sync_device_flags = device_flags;
} }
return 0; return 0;
@ -1687,7 +1700,7 @@ get_unicode_character(struct xrdp_wm *self, int device_flags, char16_t c16)
char32_t c32 = 0; char32_t c32 = 0;
int *high_ptr; int *high_ptr;
if (device_flags & KBD_FLAG_UP) if (device_flags & KBDFLAGS_RELEASE)
{ {
high_ptr = &self->last_high_surrogate_key_up; high_ptr = &self->last_high_surrogate_key_up;
} }
@ -1720,6 +1733,29 @@ get_unicode_character(struct xrdp_wm *self, int device_flags, char16_t c16)
return c32; return c32;
} }
/*****************************************************************************/
/**
* Takes a scancode index and fakes a keyboard event to represent it
* @param self module pointer
* @param device_flags default flags to pass in for the keyboard event.
* @param index scancode index
*
* Some of the device_flags are overridden by the scancode derived from the
* scancode index
*/
static void
fake_kbd_event_from_scancode_index(struct xrdp_wm *self, int device_flags,
int index)
{
unsigned short scancode = scancode_from_index(index);
int key_code = SCANCODE_TO_KBD_EVENT_KEY_CODE(scancode);
device_flags &= ~(KBDFLAGS_EXTENDED | KBDFLAGS_EXTENDED1);
device_flags |= SCANCODE_TO_KBD_EVENT_KBD_FLAGS(scancode);
xrdp_wm_key(self, device_flags, key_code);
}
/*****************************************************************************/ /*****************************************************************************/
static int static int
xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16) xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
@ -1734,69 +1770,74 @@ xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
// See if we can find the character in the existing keymap, // See if we can find the character in the existing keymap,
// and if so, generate normal key event(s) for it // and if so, generate normal key event(s) for it
for (index = XR_MIN_KEY_CODE; index < XR_MAX_KEY_CODE; index++) for (index = 0; index <= SCANCODE_MAX_INDEX; ++index)
{ {
if (c32 == self->keymap.keys_noshift[index].chr) if (c32 == self->keymap.keys_noshift[index].chr)
{ {
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); fake_kbd_event_from_scancode_index(self, device_flags, index);
return 0; return 0;
} }
} }
for (index = XR_MIN_KEY_CODE; index < XR_MAX_KEY_CODE; index++) for (index = 0; index <= SCANCODE_MAX_INDEX; ++index)
{ {
if (c32 == self->keymap.keys_shift[index].chr) if (c32 == self->keymap.keys_shift[index].chr)
{ {
if (device_flags & KBD_FLAG_UP) if (device_flags & KBDFLAGS_RELEASE)
{ {
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); fake_kbd_event_from_scancode_index(self, device_flags, index);
xrdp_wm_key(self, KBD_FLAG_UP, XR_RDP_SCAN_LSHIFT); fake_kbd_event_from_scancode_index(self, device_flags,
SCANCODE_INDEX_LSHIFT_KEY);
} }
else else
{ {
xrdp_wm_key(self, KBD_FLAG_DOWN, XR_RDP_SCAN_LSHIFT); fake_kbd_event_from_scancode_index(self, device_flags,
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); SCANCODE_INDEX_LSHIFT_KEY);
fake_kbd_event_from_scancode_index(self, device_flags, index);
} }
return 0; return 0;
} }
} }
for (index = XR_MIN_KEY_CODE; index < XR_MAX_KEY_CODE; index++) for (index = 0; index <= SCANCODE_MAX_INDEX; ++index)
{ {
if (c32 == self->keymap.keys_altgr[index].chr) if (c32 == self->keymap.keys_altgr[index].chr)
{ {
if (device_flags & KBD_FLAG_UP) if (device_flags & KBDFLAGS_RELEASE)
{ {
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); fake_kbd_event_from_scancode_index(self, device_flags, index);
xrdp_wm_key(self, KBD_FLAG_UP | KBD_FLAG_EXT, fake_kbd_event_from_scancode_index(self, device_flags,
XR_RDP_SCAN_ALT); SCANCODE_INDEX_RALT_KEY);
} }
else else
{ {
xrdp_wm_key(self, KBD_FLAG_DOWN | KBD_FLAG_EXT, fake_kbd_event_from_scancode_index(self, device_flags,
XR_RDP_SCAN_ALT); SCANCODE_INDEX_RALT_KEY);
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); fake_kbd_event_from_scancode_index(self, device_flags, index);
} }
return 0; return 0;
} }
} }
for (index = XR_MIN_KEY_CODE; index < XR_MAX_KEY_CODE; index++) for (index = 0; index <= SCANCODE_MAX_INDEX; ++index)
{ {
if (c32 == self->keymap.keys_shiftaltgr[index].chr) if (c32 == self->keymap.keys_shiftaltgr[index].chr)
{ {
if (device_flags & KBD_FLAG_UP) if (device_flags & KBDFLAGS_RELEASE)
{ {
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); fake_kbd_event_from_scancode_index(self, device_flags, index);
xrdp_wm_key(self, KBD_FLAG_UP | KBD_FLAG_EXT, XR_RDP_SCAN_ALT); fake_kbd_event_from_scancode_index(self, device_flags,
xrdp_wm_key(self, KBD_FLAG_UP, XR_RDP_SCAN_LSHIFT); SCANCODE_INDEX_RALT_KEY);
fake_kbd_event_from_scancode_index(self, device_flags,
SCANCODE_INDEX_LSHIFT_KEY);
} }
else else
{ {
xrdp_wm_key(self, KBD_FLAG_DOWN, XR_RDP_SCAN_LSHIFT); fake_kbd_event_from_scancode_index(self, device_flags,
xrdp_wm_key(self, KBD_FLAG_DOWN | KBD_FLAG_EXT, SCANCODE_INDEX_LSHIFT_KEY);
XR_RDP_SCAN_ALT); fake_kbd_event_from_scancode_index(self, device_flags,
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE); SCANCODE_INDEX_RALT_KEY);
fake_kbd_event_from_scancode_index(self, device_flags, index);
} }
return 0; return 0;
} }
@ -1809,7 +1850,7 @@ xrdp_wm_key_unicode(struct xrdp_wm *self, int device_flags, char32_t c16)
self->mm->chan_trans->status == TRANS_STATUS_UP) self->mm->chan_trans->status == TRANS_STATUS_UP)
{ {
xrdp_mm_send_unicode_to_chansrv(self->mm, xrdp_mm_send_unicode_to_chansrv(self->mm,
!(device_flags & KBD_FLAG_UP), c32); !(device_flags & KBDFLAGS_RELEASE), c32);
return 0; return 0;
} }

View File

@ -171,6 +171,26 @@ lib_mod_connect(struct mod *mod)
return 1; return 1;
} }
// This is a good place to finalise any parameters that need to
// be set.
//
// Load the XKB layout
if (mod->keycode_set[0] != '\0')
{
if (scancode_set_keycode_set(mod->keycode_set) == 0)
{
LOG(LOG_LEVEL_INFO, "Loaded '%s' keycode set", mod->keycode_set);
}
else
{
LOG(LOG_LEVEL_WARNING, "Unable to load '%s' keycode set",
mod->keycode_set);
}
}
mod->server_init_xkb_layout(mod, &(mod->client_info));
LOG(LOG_LEVEL_INFO, "XKB rules '%s' will be used by the module",
mod->client_info.xkb_rules);
make_stream(s); make_stream(s);
g_sprintf(con_port, "%s", mod->port); g_sprintf(con_port, "%s", mod->port);
@ -266,6 +286,7 @@ lib_mod_event(struct mod *mod, int msg, tbus param1, tbus param2,
int len; int len;
int key; int key;
int rv; int rv;
int scancode;
LOG_DEVEL(LOG_LEVEL_TRACE, "in lib_mod_event"); LOG_DEVEL(LOG_LEVEL_TRACE, "in lib_mod_event");
make_stream(s); make_stream(s);
@ -311,15 +332,8 @@ lib_mod_event(struct mod *mod, int msg, tbus param1, tbus param2,
/* xup doesn't need the Unicode character mapping in param1. Send /* xup doesn't need the Unicode character mapping in param1. Send
* the X11 scancode instead, so xorgxrdp doesn't have to do this * the X11 scancode instead, so xorgxrdp doesn't have to do this
* work again */ * work again */
if ((param4 & KBD_FLAG_EXT) != 0) scancode = SCANCODE_FROM_KBD_EVENT(param3, param4);
{ param1 = scancode_to_x11_keycode(scancode);
// Extended key - set bit 9 of the scancode for the lookup
param1 = scancode_to_keycode(param3 | 0x100);
}
else
{
param1 = scancode_to_keycode(param3);
}
} }
init_stream(s, 8192); init_stream(s, 8192);
@ -1869,6 +1883,10 @@ lib_mod_set_param(struct mod *mod, const char *name, const char *value)
{ {
g_strncpy(mod->port, value, 255); g_strncpy(mod->port, value, 255);
} }
else if (g_strcasecmp(name, "keycode_set") == 0)
{
g_snprintf(mod->keycode_set, sizeof(mod->keycode_set), "%s", value);
}
else if (g_strcasecmp(name, "client_info") == 0) else if (g_strcasecmp(name, "client_info") == 0)
{ {
g_memcpy(&(mod->client_info), value, sizeof(mod->client_info)); g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));

View File

@ -34,6 +34,7 @@
#define CURRENT_MOD_VER 4 #define CURRENT_MOD_VER 4
struct source_info; struct source_info;
struct xrdp_client_info;
struct mod struct mod
{ {
@ -111,6 +112,8 @@ struct mod
int total_data_len, int flags); int total_data_len, int flags);
int (*server_bell_trigger)(struct mod *v); int (*server_bell_trigger)(struct mod *v);
int (*server_chansrv_in_use)(struct mod *v); int (*server_chansrv_in_use)(struct mod *v);
void (*server_init_xkb_layout)(struct mod *v,
struct xrdp_client_info *client_info);
/* off screen bitmaps */ /* off screen bitmaps */
int (*server_create_os_surface)(struct mod *v, int rdpindex, int (*server_create_os_surface)(struct mod *v, int rdpindex,
int width, int height); int width, int height);
@ -176,7 +179,7 @@ struct mod
int (*server_egfx_cmd)(struct mod *v, int (*server_egfx_cmd)(struct mod *v,
char *cmd, int cmd_bytes, char *cmd, int cmd_bytes,
char *data, int data_bytes); char *data, int data_bytes);
tintptr server_dumby[100 - 50]; /* align, 100 minus the number of server tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
functions above */ functions above */
/* common */ /* common */
tintptr handle; /* pointer to self as long */ tintptr handle; /* pointer to self as long */
@ -198,6 +201,7 @@ struct mod
int screen_shmem_id_mapped; /* boolean */ int screen_shmem_id_mapped; /* boolean */
char *screen_shmem_pixels; char *screen_shmem_pixels;
struct trans *trans; struct trans *trans;
char keycode_set[32];
}; };
#endif // XUP_H #endif // XUP_H