mirror of https://github.com/neutrinolabs/xrdp
Merge pull request #3138 from matt335672/update_scancode_processing
Update scancode processing
This commit is contained in:
commit
8fd941632d
|
@ -20,6 +20,7 @@ include_HEADERS = \
|
|||
xrdp_client_info.h \
|
||||
xrdp_constants.h \
|
||||
xrdp_rail.h \
|
||||
xrdp_scancode_defs.h \
|
||||
xrdp_sockets.h
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
|
|
|
@ -480,13 +480,10 @@
|
|||
#define RDP_INPUT_MOUSEX 0x8002
|
||||
|
||||
/* Keyboard Event: keyboardFlags (2.2.8.1.1.3.1.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define KBD_FLAG_RIGHT 0x0001
|
||||
#define KBD_FLAG_EXT 0x0100 /* KBDFLAGS_EXTENDED */
|
||||
#define KBD_FLAG_EXT1 0x0200 /* KBDFLAGS_EXTENDED1 */
|
||||
#define KBD_FLAG_QUIET 0x1000
|
||||
#define KBD_FLAG_DOWN 0x4000
|
||||
#define KBD_FLAG_UP 0x8000
|
||||
#define KBDFLAGS_EXTENDED 0x0100
|
||||
#define KBDFLAGS_EXTENDED1 0x0200
|
||||
#define KBDFLAGS_DOWN 0x4000
|
||||
#define KBDFLAGS_RELEASE 0x8000
|
||||
|
||||
/* Mouse Event: pointerFlags (2.2.8.1.1.3.1.1.3) */
|
||||
#define PTRFLAGS_HWHEEL 0x0400
|
||||
|
@ -505,10 +502,9 @@
|
|||
#define PTRXFLAGS_BUTTON2 0x0002
|
||||
|
||||
/* Synchronize Event: toggleFlags (2.2.8.1.1.3.1.1.5) */
|
||||
/* TODO: to be renamed */
|
||||
#define KBD_FLAG_SCROLL 0x0001 /* TS_SYNC_SCROLL_LOCK */
|
||||
#define KBD_FLAG_NUMLOCK 0x0002
|
||||
#define KBD_FLAG_CAPITAL 0x0004
|
||||
#define TS_SYNC_SCROLL_LOCK 0x0001
|
||||
#define TS_SYNC_NUM_LOCK 0x0002
|
||||
#define TS_SYNC_CAPS_LOCK 0x0004
|
||||
#define TS_SYNC_KANA_LOCK 0x0008
|
||||
|
||||
/* Client Fast-Path Input Event PDU 2.2.8.1.2 */
|
||||
|
|
|
@ -137,6 +137,7 @@ static const struct scancode_to_keycode
|
|||
{ 0x079, 100 }, // - HENK
|
||||
{ 0x07b, 102 }, // VK_OEM_PA1 MUHE
|
||||
{ 0x07d, 132 }, // - AE13
|
||||
{ 0x07e, 129 }, // VK_ABNT_C2 KPPT (Brazil ABNT2)
|
||||
{ 0x110, 173 }, // VK_MEDIA_PREV_TRACK I173 (KEY_PREVIOUSSONG)
|
||||
{ 0x119, 171 }, // VK_MEDIA_NEXT_TRACK I171 (KEY_NEXTSONG)
|
||||
{ 0x11c, 104 }, // VK_RETURN KPEN
|
||||
|
@ -167,7 +168,8 @@ static const struct scancode_to_keycode
|
|||
{ 0x165, 225 }, // VK_BROWSER_SEARCH I225 (KEY_SEARCH)
|
||||
{ 0x166, 164 }, // VK_BROWSER_FAVORITES I164 (KEY_BOOKMARKS)
|
||||
{ 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:-
|
||||
|
@ -271,6 +273,7 @@ static const struct scancode_to_keycode
|
|||
{ 0x079, 129 }, // - XFER
|
||||
{ 0x07b, 131 }, // VK_OEM_PA1 NFER
|
||||
{ 0x07d, 133 }, // - AE13
|
||||
{ 0x07e, 134 }, // VK_ABNT_C2 KPPT (Brazil ABNT2)
|
||||
{ 0x11c, 108 }, // VK_RETURN KPEN
|
||||
{ 0x11d, 109 }, // VK_RCONTROL RCTL
|
||||
{ 0x120, 141 }, // VK_VOLUME_MUTE MUTE
|
||||
|
@ -291,7 +294,8 @@ static const struct scancode_to_keycode
|
|||
{ 0x153, 107 }, // VK_DELETE DELE
|
||||
{ 0x15b, 115 }, // VK_LWIN LWIN
|
||||
{ 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
|
||||
|
@ -326,9 +330,63 @@ const struct map_settings global_settings[] =
|
|||
// Default mapping set is "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
|
||||
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 max = settings->size;
|
||||
|
@ -419,3 +477,12 @@ scancode_get_keycode_set(void)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -18,13 +18,32 @@
|
|||
* @file common/scancode.h
|
||||
* @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
|
||||
* indirectly documented in the Microsoft "Keyboard Scan Code Specification",
|
||||
* Rev 1.3a (March 16th 2000) and are otherwise known as "Scan code set
|
||||
* 1" scancodes. This document no longer appears to be available directly from
|
||||
* the Microsoft website.
|
||||
* The values received in TS_KEYBOARD_EVENT PDUs are largely the same as
|
||||
* Windows scancodes. These are indirectly documented in the Microsoft
|
||||
* "Keyboard Scan Code Specification", Rev 1.3a (March 16th 2000) and
|
||||
* are otherwise known as "Scan code set 1" scancodes. This document no
|
||||
* 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
|
||||
* are specific to an X server. In practice however, these are nowadays
|
||||
|
@ -39,15 +58,69 @@
|
|||
#if !defined(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
|
||||
* (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
|
||||
*/
|
||||
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
|
||||
|
@ -84,4 +157,13 @@ scancode_set_keycode_set(const char *kk_set);
|
|||
const char *
|
||||
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 */
|
||||
|
|
|
@ -200,6 +200,11 @@ struct xrdp_client_info
|
|||
char layout[16];
|
||||
char variant[16];
|
||||
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 */
|
||||
|
@ -269,6 +274,6 @@ enum xrdp_encoder_flags
|
|||
|
||||
/* yyyymmdd of last incompatible change to xrdp_client_info */
|
||||
/* also used for changes to all the xrdp installed headers */
|
||||
#define CLIENT_INFO_CURRENT_VERSION 20240514
|
||||
#define CLIENT_INFO_CURRENT_VERSION 20240805
|
||||
|
||||
#endif
|
||||
|
|
|
@ -63,9 +63,6 @@
|
|||
#define XRDP_MAX_BITMAP_CACHE_IDX 2000
|
||||
#define XRDP_BITMAP_CACHE_ENTRIES 2048
|
||||
|
||||
#define XR_MIN_KEY_CODE 8
|
||||
#define XR_MAX_KEY_CODE 256
|
||||
|
||||
/*
|
||||
* Constants come from ITU-T Recommendations
|
||||
*/
|
||||
|
@ -288,12 +285,6 @@
|
|||
|
||||
#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.
|
||||
#define XRDP_PIXMAN_TYPE_ARGB 2
|
||||
#define XRDP_PIXMAN_TYPE_ABGR 3
|
||||
|
|
|
@ -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 */
|
|
@ -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
|
||||
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"
|
||||
This is an example \fBxrdp.ini\fR:
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
|
||||
// Scancodes affected by numlock
|
||||
#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
|
||||
|
||||
|
@ -279,7 +279,7 @@ output_file_section(FILE *outf,
|
|||
continue;
|
||||
}
|
||||
|
||||
e.keycode = scancode_to_keycode(scancode);
|
||||
e.keycode = scancode_to_x11_keycode(scancode);
|
||||
nbytes = XLookupString(&e, text, 255, &ks, NULL);
|
||||
if (ks == NoSymbol)
|
||||
{
|
||||
|
@ -299,7 +299,11 @@ output_file_section(FILE *outf,
|
|||
unicode = wtext[0];
|
||||
}
|
||||
|
||||
if (scancode > 0xff)
|
||||
if (scancode > 0x1ff)
|
||||
{
|
||||
fputs("E1_", outf);
|
||||
}
|
||||
else if (scancode > 0xff)
|
||||
{
|
||||
fputs("E0_", outf);
|
||||
}
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -950,6 +964,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -981,6 +996,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -707,6 +717,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -738,6 +749,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -829,6 +841,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -860,6 +873,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -951,6 +965,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -982,6 +997,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -340,6 +344,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -371,6 +376,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -581,6 +589,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -612,6 +621,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -701,6 +711,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -732,6 +743,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -823,6 +835,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -854,6 +867,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -942,6 +956,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -973,6 +988,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -826,6 +838,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -857,6 +870,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -948,6 +962,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -979,6 +994,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -99,6 +99,7 @@ version=2
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="165:U+00A5" # yen
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -130,6 +131,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -223,6 +225,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="124:U+007C" # bar
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -254,6 +257,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -347,6 +351,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="165:U+00A5" # yen
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -378,6 +383,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -471,6 +477,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="124:U+007C" # bar
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -502,6 +509,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -595,6 +603,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="165:U+00A5" # yen
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -626,6 +635,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -719,6 +729,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="165:U+00A5" # yen
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -750,6 +761,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -843,6 +855,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="124:U+007C" # bar
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -874,6 +887,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -967,6 +981,7 @@ E0_6C="269025049" # XF86Mail
|
|||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7D="124:U+007C" # bar
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -998,6 +1013,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -707,6 +717,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -738,6 +749,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -829,6 +841,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -860,6 +873,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -951,6 +965,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -982,6 +997,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -218,6 +220,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -249,6 +252,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -368,6 +373,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -581,6 +589,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -612,6 +621,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -699,6 +709,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -729,6 +740,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -819,6 +831,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -850,6 +863,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -941,6 +955,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -972,6 +987,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -98,6 +98,7 @@ version=2
|
|||
73="47:U+002F" # slash
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -129,6 +130,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -221,6 +223,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="63:U+003F" # question
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -252,6 +255,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -344,6 +348,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="176:U+00B0" # degree
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -375,6 +380,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -467,6 +473,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="191:U+00BF" # questiondown
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -498,6 +505,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -590,6 +598,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="47:U+002F" # slash
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -621,6 +630,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -711,6 +721,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="176:U+00B0" # degree
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -742,6 +753,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -834,6 +846,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="63:U+003F" # question
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -865,6 +878,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -956,6 +970,7 @@ E0_6C="269025049" # XF86Mail
|
|||
73="191:U+00BF" # questiondown
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -987,6 +1002,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -462,6 +468,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -493,6 +500,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -218,6 +220,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -249,6 +252,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -368,6 +373,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -459,6 +465,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -490,6 +497,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -580,6 +588,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -611,6 +620,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -699,6 +709,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -729,6 +740,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -819,6 +831,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -850,6 +863,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -941,6 +955,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -972,6 +987,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -463,6 +469,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -494,6 +501,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -585,6 +593,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -616,6 +625,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -705,6 +715,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -736,6 +747,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -827,6 +839,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -858,6 +871,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -341,6 +345,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -372,6 +377,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -462,6 +468,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -493,6 +500,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -584,6 +592,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -615,6 +624,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -706,6 +716,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -737,6 +748,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -828,6 +840,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -859,6 +872,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -949,6 +963,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -980,6 +995,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65463:U+0037" # KP_7
|
||||
|
|
|
@ -97,6 +97,7 @@ version=2
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -128,6 +129,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shift]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -219,6 +221,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -250,6 +253,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[altgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -338,6 +342,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -369,6 +374,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -449,6 +455,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -480,6 +487,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -571,6 +579,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -602,6 +611,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[capslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -684,6 +694,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -715,6 +726,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslock]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -806,6 +818,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -837,6 +850,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
01="65307:U+001B" # Escape
|
||||
|
@ -923,6 +937,7 @@ E0_6C="269025049" # XF86Mail
|
|||
70="65319" # Hiragana_Katakana
|
||||
79="65315" # Henkan_Mode
|
||||
7B="65314" # Muhenkan
|
||||
7E="65454:U+002E" # KP_Decimal
|
||||
E0_10="269025046" # XF86AudioPrev
|
||||
E0_19="269025047" # XF86AudioNext
|
||||
E0_1C="65421:U+000D" # KP_Enter
|
||||
|
@ -954,6 +969,7 @@ E0_65="269025051" # XF86Search
|
|||
E0_66="269025072" # XF86Favorites
|
||||
E0_6B="269025075" # XF86MyComputer
|
||||
E0_6C="269025049" # XF86Mail
|
||||
E1_1D="65299" # Pause
|
||||
|
||||
[numlock]
|
||||
47="65457:U+0031" # KP_1
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit c6b41afa6986d5e6df18778a342b407cae40e1b5
|
||||
Subproject commit e8208bfc0b9d122b1c393a659427fbb135e9cd75
|
|
@ -151,6 +151,38 @@ xrdp_fastpath_send(struct xrdp_fastpath *self, struct stream *s)
|
|||
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 */
|
||||
static int
|
||||
|
@ -159,7 +191,6 @@ xrdp_fastpath_process_EVENT_SCANCODE(struct xrdp_fastpath *self,
|
|||
{
|
||||
int flags;
|
||||
int code;
|
||||
flags = 0;
|
||||
|
||||
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), "
|
||||
"keyCode %d", eventFlags, code);
|
||||
|
||||
if ((eventFlags & FASTPATH_INPUT_KBDFLAGS_RELEASE))
|
||||
{
|
||||
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;
|
||||
}
|
||||
flags = get_slowpath_keyboard_event_flags(eventFlags);
|
||||
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_SCANCODE,
|
||||
code, 0, flags, 0);
|
||||
|
@ -296,7 +310,6 @@ xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
|
|||
int flags;
|
||||
int code;
|
||||
|
||||
flags = 0;
|
||||
if (!s_check_rem_and_log(s, 2, "Parsing [MS-RDPBCGR] TS_FP_UNICODE_KEYBOARD_EVENT"))
|
||||
{
|
||||
return 1;
|
||||
|
@ -307,18 +320,8 @@ xrdp_fastpath_process_EVENT_UNICODE(struct xrdp_fastpath *self,
|
|||
"unicodeCode %d",
|
||||
eventFlags, code);
|
||||
|
||||
if (eventFlags & FASTPATH_INPUT_KBDFLAGS_RELEASE)
|
||||
{
|
||||
flags |= KBD_FLAG_UP;
|
||||
}
|
||||
else
|
||||
{
|
||||
flags |= KBD_FLAG_DOWN;
|
||||
}
|
||||
if (eventFlags & FASTPATH_INPUT_KBDFLAGS_EXTENDED)
|
||||
{
|
||||
flags |= KBD_FLAG_EXT;
|
||||
}
|
||||
flags = get_slowpath_keyboard_event_flags(eventFlags);
|
||||
|
||||
xrdp_fastpath_session_callback(self, RDP_INPUT_UNICODE,
|
||||
code, 0, flags, 0);
|
||||
return 0;
|
||||
|
|
|
@ -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 *
|
||||
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_subtype);
|
||||
|
||||
xrdp_load_keyboard_layout(client_info);
|
||||
s->p = s->data;
|
||||
|
||||
return 0;
|
||||
|
|
5
mc/mc.h
5
mc/mc.h
|
@ -30,6 +30,7 @@
|
|||
#define CURRENT_MOD_VER 3
|
||||
|
||||
struct source_info;
|
||||
struct xrdp_client_info;
|
||||
|
||||
/* Defined in xrdp_client_info.h */
|
||||
struct monitor_info;
|
||||
|
@ -98,7 +99,9 @@ struct mod
|
|||
int total_data_len, int flags);
|
||||
int (*server_bell_trigger)(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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as long */
|
||||
|
|
|
@ -143,6 +143,8 @@ struct mod
|
|||
int total_data_len, int flags);
|
||||
int (*server_bell_trigger)(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 */
|
||||
int (*server_create_os_surface)(struct mod *v, int rdpindex,
|
||||
int width, int height);
|
||||
|
@ -197,7 +199,7 @@ struct mod
|
|||
int flags, int frame_id);
|
||||
int (*server_session_info)(struct mod *v, const char *data,
|
||||
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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as long */
|
||||
|
|
|
@ -7,6 +7,57 @@
|
|||
|
||||
#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
|
||||
START_TEST(test_scancode__keycode_sets)
|
||||
{
|
||||
|
@ -31,7 +82,9 @@ START_TEST(test_scancode__evdev_all_values_returned)
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
@ -40,8 +93,8 @@ END_TEST
|
|||
// Checks all invalid evdev scancodes return 0
|
||||
START_TEST(test_scancode__evdev_bad_values_mapped_to_0)
|
||||
{
|
||||
// Store valid scancodes which are between 0 and 0x1ff
|
||||
int valid[512] = {0};
|
||||
// Store valid scancodes which are between 0 and MAX_SUPPORTED_SCANCODE
|
||||
char valid[MAX_SUPPORTED_SCANCODE + 1] = {0};
|
||||
unsigned int iter;
|
||||
unsigned int scancode;
|
||||
|
||||
|
@ -50,14 +103,16 @@ START_TEST(test_scancode__evdev_bad_values_mapped_to_0)
|
|||
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;
|
||||
}
|
||||
|
||||
for (scancode = 0 ; scancode < 512; ++scancode)
|
||||
for (scancode = 0 ; scancode <= MAX_SUPPORTED_SCANCODE; ++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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -83,8 +140,8 @@ END_TEST
|
|||
// Checks all invalid base scancodes return 0
|
||||
START_TEST(test_scancode__base_bad_values_mapped_to_0)
|
||||
{
|
||||
// Store valid scancodes which are between 0 and 0x1ff
|
||||
int valid[512] = {0};
|
||||
// Store valid scancodes which are between 0 and MAX_SUPPORTED_SCANCODE
|
||||
char valid[MAX_SUPPORTED_SCANCODE + 1] = {0};
|
||||
unsigned int iter;
|
||||
unsigned int scancode;
|
||||
|
||||
|
@ -93,14 +150,16 @@ START_TEST(test_scancode__base_bad_values_mapped_to_0)
|
|||
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;
|
||||
}
|
||||
|
||||
for (scancode = 0 ; scancode < 512; ++scancode)
|
||||
for (scancode = 0 ; scancode <= MAX_SUPPORTED_SCANCODE; ++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");
|
||||
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__evdev_all_values_returned);
|
||||
tcase_add_test(tc, test_scancode__evdev_bad_values_mapped_to_0);
|
||||
|
|
|
@ -5,6 +5,8 @@ AM_CPPFLAGS = \
|
|||
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
|
||||
-I$(top_srcdir)/common
|
||||
|
||||
AM_CFLAGS = $(X_CFLAGS)
|
||||
|
||||
module_LTLIBRARIES = \
|
||||
libvnc.la
|
||||
|
||||
|
|
115
vnc/vnc.c
115
vnc/vnc.c
|
@ -30,6 +30,8 @@
|
|||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include <X11/keysym.h>
|
||||
|
||||
#include "vnc.h"
|
||||
#include "vnc_clip.h"
|
||||
#include "rfb.h"
|
||||
|
@ -443,13 +445,90 @@ resize_server_to_client_layout(struct vnc *v)
|
|||
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
|
||||
lib_mod_event(struct vnc *v, int msg, long param1, long param2,
|
||||
long param3, long param4)
|
||||
{
|
||||
struct stream *s;
|
||||
int key;
|
||||
int error;
|
||||
int x;
|
||||
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 */
|
||||
{
|
||||
key = param2;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
error = process_keysym_msg(v, param2, (msg == 15));
|
||||
}
|
||||
/* mouse events
|
||||
*
|
||||
|
@ -613,7 +661,6 @@ lib_mod_event(struct vnc *v, int msg, long param1, long param2,
|
|||
error = lib_send_copy(v, s);
|
||||
}
|
||||
}
|
||||
|
||||
free_stream(s);
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ enum vnc_resize_support_status
|
|||
};
|
||||
|
||||
struct source_info;
|
||||
struct xrdp_client_info;
|
||||
|
||||
/* Defined in vnc_clip.c */
|
||||
struct vnc_clipboard_data;
|
||||
|
@ -151,7 +152,9 @@ struct vnc
|
|||
int total_data_len, int flags);
|
||||
int (*server_bell_trigger)(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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as long */
|
||||
|
@ -170,6 +173,7 @@ struct vnc
|
|||
char port[256];
|
||||
int sck_closed;
|
||||
int shift_state; /* 0 up, 1 down */
|
||||
int ignore_next_numlock; /* Used in pause key processing */
|
||||
int keylayout;
|
||||
int clip_chanid;
|
||||
struct vnc_clipboard_data *vc;
|
||||
|
|
397
xrdp/lang.c
397
xrdp/lang.c
|
@ -39,58 +39,62 @@
|
|||
|
||||
/*****************************************************************************/
|
||||
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,
|
||||
struct xrdp_keymap *keymap)
|
||||
{
|
||||
struct xrdp_key_info *rv;
|
||||
int shift;
|
||||
int altgr;
|
||||
int ext;
|
||||
int index;
|
||||
|
||||
ext = device_flags & KBD_FLAG_EXT; /* 0x0100 */
|
||||
shift = keys[42] || keys[54];
|
||||
altgr = keys[56] & KBD_FLAG_EXT; /* right alt */
|
||||
shift = keys[SCANCODE_INDEX_LSHIFT_KEY] || keys[SCANCODE_INDEX_RSHIFT_KEY];
|
||||
altgr = keys[SCANCODE_INDEX_RALT_KEY]; /* right alt */
|
||||
rv = 0;
|
||||
index = INDEX_FROM_SCANCODE(scan_code, ext);
|
||||
|
||||
if (num_lock &&
|
||||
index >= XR_RDP_SCAN_MIN_NUMLOCK && index <= XR_RDP_SCAN_MAX_NUMLOCK)
|
||||
index = scancode_to_index(SCANCODE_FROM_KBD_EVENT(key_code, keyboard_flags));
|
||||
if (index >= 0)
|
||||
{
|
||||
rv = &(keymap->keys_numlock[index - XR_RDP_SCAN_MIN_NUMLOCK]);
|
||||
}
|
||||
else if (shift && caps_lock && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_shiftcapslockaltgr[index]);
|
||||
}
|
||||
else if (shift && caps_lock)
|
||||
{
|
||||
rv = &(keymap->keys_shiftcapslock[index]);
|
||||
}
|
||||
else if (shift && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_shiftaltgr[index]);
|
||||
}
|
||||
else if (shift)
|
||||
{
|
||||
rv = &(keymap->keys_shift[index]);
|
||||
}
|
||||
else if (caps_lock && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_capslockaltgr[index]);
|
||||
}
|
||||
else if (caps_lock)
|
||||
{
|
||||
rv = &(keymap->keys_capslock[index]);
|
||||
}
|
||||
else if (altgr)
|
||||
{
|
||||
rv = &(keymap->keys_altgr[index]);
|
||||
}
|
||||
else
|
||||
{
|
||||
rv = &(keymap->keys_noshift[index]);
|
||||
// scancode_to_index() guarantees to map numlock scancodes
|
||||
// to the same index values.
|
||||
if (num_lock &&
|
||||
index >= SCANCODE_MIN_NUMLOCK &&
|
||||
index <= SCANCODE_MAX_NUMLOCK)
|
||||
{
|
||||
rv = &(keymap->keys_numlock[index - SCANCODE_MIN_NUMLOCK]);
|
||||
}
|
||||
else if (shift && caps_lock && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_shiftcapslockaltgr[index]);
|
||||
}
|
||||
else if (shift && caps_lock)
|
||||
{
|
||||
rv = &(keymap->keys_shiftcapslock[index]);
|
||||
}
|
||||
else if (shift && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_shiftaltgr[index]);
|
||||
}
|
||||
else if (shift)
|
||||
{
|
||||
rv = &(keymap->keys_shift[index]);
|
||||
}
|
||||
else if (caps_lock && altgr)
|
||||
{
|
||||
rv = &(keymap->keys_capslockaltgr[index]);
|
||||
}
|
||||
else if (caps_lock)
|
||||
{
|
||||
rv = &(keymap->keys_capslock[index]);
|
||||
}
|
||||
else if (altgr)
|
||||
{
|
||||
rv = &(keymap->keys_altgr[index]);
|
||||
}
|
||||
else
|
||||
{
|
||||
rv = &(keymap->keys_noshift[index]);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
|
@ -98,13 +102,13 @@ get_key_info_from_scan_code(int device_flags, int scan_code, int *keys,
|
|||
|
||||
/*****************************************************************************/
|
||||
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,
|
||||
struct xrdp_keymap *keymap)
|
||||
{
|
||||
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,
|
||||
keymap);
|
||||
|
||||
|
@ -118,13 +122,13 @@ get_keysym_from_scan_code(int device_flags, int scan_code, int *keys,
|
|||
|
||||
/*****************************************************************************/
|
||||
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,
|
||||
struct xrdp_keymap *keymap)
|
||||
{
|
||||
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,
|
||||
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[out] scancode scancode index value (0..255) if 1 is returned
|
||||
* @return Boolean != 0 if the key is valid
|
||||
* @return index >= 0, or < 0 for an invalid key
|
||||
*/
|
||||
static int
|
||||
is_valid_scancode(const char *key, int *scancode)
|
||||
key_to_scancode_index(const char *key)
|
||||
{
|
||||
int rv = 0;
|
||||
int extended = 0;
|
||||
if ((key[0] == 'E' || key[0] == 'e') && key[1] == '0' && key[2] == '_')
|
||||
int rv = -1;
|
||||
int keyboard_flags = 0;
|
||||
if ((key[0] == 'E' || key[0] == 'e') && key[2] == '_')
|
||||
{
|
||||
extended = 1;
|
||||
key += 3;
|
||||
if (key[1] == '0')
|
||||
{
|
||||
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')
|
||||
{
|
||||
rv = 1;
|
||||
*scancode = XDIGIT_TO_VAL(key[0]) * 16 + XDIGIT_TO_VAL(key[1]);
|
||||
*scancode = INDEX_FROM_SCANCODE(*scancode, extended);
|
||||
int code = XDIGIT_TO_VAL(key[0]) * 16 + XDIGIT_TO_VAL(key[1]);
|
||||
rv = scancode_to_index(SCANCODE_FROM_KBD_EVENT(code, keyboard_flags));
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
@ -248,13 +258,14 @@ km_read_section(toml_table_t *tfile, const char *section_name,
|
|||
{
|
||||
const char *key;
|
||||
toml_datum_t val;
|
||||
int index;
|
||||
int scancode; // index value 0..255
|
||||
int i;
|
||||
char *p;
|
||||
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,
|
||||
"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
|
||||
* 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,
|
||||
"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 &&
|
||||
!is_valid_unicode_char(unicode_str, &keymap[scancode].chr))
|
||||
!is_valid_unicode_char(unicode_str, &keymap[sindex].chr))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"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);
|
||||
|
||||
/* 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 */
|
||||
struct xrdp_key_info keys_numlock[256];
|
||||
struct xrdp_key_info keys_numlock[SCANCODE_MAX_INDEX + 1];
|
||||
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].chr = 0;
|
||||
}
|
||||
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);
|
||||
|
@ -403,3 +414,253 @@ km_load_file(const char *filename, struct xrdp_keymap *keymap)
|
|||
|
||||
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);
|
||||
}
|
||||
|
|
30
xrdp/xrdp.h
30
xrdp/xrdp.h
|
@ -147,8 +147,14 @@ int
|
|||
xrdp_wm_mouse_touch(struct xrdp_wm *self, int gesture, int param);
|
||||
int
|
||||
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
|
||||
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
|
||||
xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
|
||||
int
|
||||
|
@ -424,15 +430,15 @@ set_string(char **in_str, const char *in);
|
|||
|
||||
/* in lang.c */
|
||||
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,
|
||||
struct xrdp_keymap *keymap);
|
||||
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,
|
||||
struct xrdp_keymap *keymap);
|
||||
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,
|
||||
struct xrdp_keymap *keymap);
|
||||
int
|
||||
|
@ -441,6 +447,19 @@ get_keymaps(int keylayout, struct xrdp_keymap *keymap);
|
|||
int
|
||||
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 */
|
||||
/**
|
||||
* Gets the DPI of the login (primary) monitor
|
||||
|
@ -522,6 +541,9 @@ int
|
|||
server_bell_trigger(struct xrdp_mod *mod);
|
||||
int
|
||||
server_chansrv_in_use(struct xrdp_mod *mod);
|
||||
void
|
||||
server_init_xkb_layout(struct xrdp_mod *mod,
|
||||
struct xrdp_client_info *client_info);
|
||||
int
|
||||
server_fill_rect(struct xrdp_mod *mod, int x, int y, int cx, int cy);
|
||||
int
|
||||
|
|
|
@ -248,6 +248,7 @@ username=ask
|
|||
password=ask
|
||||
port=-1
|
||||
code=20
|
||||
#keycode_set=evdev
|
||||
|
||||
[Xvnc]
|
||||
name=Xvnc
|
||||
|
|
|
@ -1024,9 +1024,6 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
int n;
|
||||
int i;
|
||||
int shift;
|
||||
int ext;
|
||||
int scan_code;
|
||||
struct xrdp_bitmap *b;
|
||||
struct xrdp_bitmap *focus_out_control;
|
||||
|
||||
|
@ -1044,12 +1041,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
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 */
|
||||
shift = self->wm->keys[42] || self->wm->keys[54];
|
||||
i = -1;
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -1149,12 +1148,13 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
{
|
||||
if (msg == WM_KEYDOWN)
|
||||
{
|
||||
scan_code = param1 % 128;
|
||||
ext = param2 & 0x0100;
|
||||
|
||||
int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
|
||||
int num_lock = self->wm->num_lock;
|
||||
/* left or up arrow */
|
||||
if ((scan_code == 75 || scan_code == 72) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
|
||||
(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)
|
||||
{
|
||||
|
@ -1163,8 +1163,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* right or down arrow */
|
||||
else if ((scan_code == 77 || scan_code == 80) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
|
||||
(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))
|
||||
{
|
||||
|
@ -1173,7 +1175,7 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* backspace */
|
||||
else if (scan_code == 14)
|
||||
else if (scan_code == SCANCODE_BACKSPACE_KEY)
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1188,8 +1190,9 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* delete */
|
||||
else if (scan_code == 83 &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_DEL_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_DEL_KEY)))
|
||||
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1203,8 +1206,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* end */
|
||||
else if (scan_code == 79 &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_END_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_1_KEY)))
|
||||
{
|
||||
n = utf8_char_count(self->caption1);
|
||||
|
||||
|
@ -1215,8 +1218,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* home */
|
||||
else if ((scan_code == 71) &&
|
||||
(ext || (self->wm->num_lock == 0)))
|
||||
else if ((scan_code == SCANCODE_HOME_KEY) ||
|
||||
(!num_lock && (scan_code == SCANCODE_KP_7_KEY)))
|
||||
{
|
||||
if (self->edit_pos > 0)
|
||||
{
|
||||
|
@ -1226,8 +1229,8 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
else
|
||||
{
|
||||
char32_t c = get_char_from_scan_code
|
||||
(param2, scan_code, self->wm->keys, self->wm->caps_lock,
|
||||
char32_t c = get_char_from_kbd_event
|
||||
(param2, param1, self->wm->keys, self->wm->caps_lock,
|
||||
self->wm->num_lock, self->wm->scroll_lock,
|
||||
&(self->wm->keymap));
|
||||
// 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)
|
||||
{
|
||||
scan_code = param1 % 128;
|
||||
ext = param2 & 0x0100;
|
||||
int scan_code = SCANCODE_FROM_KBD_EVENT(param1, param2);
|
||||
int num_lock = self->wm->num_lock;
|
||||
|
||||
/* left or up arrow */
|
||||
if (((scan_code == 75) || (scan_code == 72)) &&
|
||||
(ext || (self->wm->num_lock == 0)))
|
||||
if ((scan_code == SCANCODE_LEFT_ARROW_KEY) ||
|
||||
(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)
|
||||
{
|
||||
|
@ -1264,8 +1269,10 @@ xrdp_bitmap_def_proc(struct xrdp_bitmap *self, int msg,
|
|||
}
|
||||
}
|
||||
/* right or down arrow */
|
||||
else if ((scan_code == 77 || scan_code == 80) &&
|
||||
(ext || self->wm->num_lock == 0))
|
||||
else if ((scan_code == SCANCODE_RIGHT_ARROW_KEY) ||
|
||||
(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)
|
||||
{
|
||||
|
|
|
@ -384,6 +384,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
|
|||
self->mod->server_end_update = server_end_update;
|
||||
self->mod->server_bell_trigger = server_bell_trigger;
|
||||
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_screen_blt = server_screen_blt;
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
|
@ -3986,6 +3999,15 @@ server_chansrv_in_use(struct xrdp_mod *mod)
|
|||
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
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "xrdp_constants.h"
|
||||
#include "fifo.h"
|
||||
#include "guid.h"
|
||||
#include "scancode.h"
|
||||
#include "xrdp_client_info.h"
|
||||
|
||||
#define MAX_NR_CHANNELS 16
|
||||
|
@ -123,6 +124,8 @@ struct xrdp_mod
|
|||
int total_data_len, int flags);
|
||||
int (*server_bell_trigger)(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 */
|
||||
int (*server_create_os_surface)(struct xrdp_mod *v, int rdpindex,
|
||||
int width, int height);
|
||||
|
@ -191,7 +194,7 @@ struct xrdp_mod
|
|||
int (*server_egfx_cmd)(struct xrdp_mod *v,
|
||||
char *cmd, int cmd_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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as int */
|
||||
|
@ -444,6 +447,10 @@ struct xrdp_mm
|
|||
struct display_control_monitor_layout_data *resize_data;
|
||||
struct list *resize_queue;
|
||||
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
|
||||
|
@ -452,28 +459,20 @@ struct xrdp_key_info
|
|||
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_key_info keys_noshift[256];
|
||||
struct xrdp_key_info keys_shift[256];
|
||||
struct xrdp_key_info keys_altgr[256];
|
||||
struct xrdp_key_info keys_shiftaltgr[256];
|
||||
struct xrdp_key_info keys_capslock[256];
|
||||
struct xrdp_key_info keys_capslockaltgr[256];
|
||||
struct xrdp_key_info keys_shiftcapslock[256];
|
||||
struct xrdp_key_info keys_shiftcapslockaltgr[256];
|
||||
// These arrays are indexed by a return from scancode_to_index()
|
||||
struct xrdp_key_info keys_noshift[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_shift[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_altgr[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_shiftaltgr[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_capslock[SCANCODE_MAX_INDEX + 1];
|
||||
struct xrdp_key_info keys_capslockaltgr[SCANCODE_MAX_INDEX + 1];
|
||||
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
|
||||
struct xrdp_key_info keys_numlock[XR_RDP_SCAN_MAX_NUMLOCK -
|
||||
XR_RDP_SCAN_MIN_NUMLOCK + 1];
|
||||
struct xrdp_key_info keys_numlock[SCANCODE_MAX_NUMLOCK -
|
||||
SCANCODE_MIN_NUMLOCK + 1];
|
||||
};
|
||||
|
||||
/* the window manager */
|
||||
|
@ -554,11 +553,12 @@ struct xrdp_wm
|
|||
int current_pointer;
|
||||
int mouse_x;
|
||||
int mouse_y;
|
||||
/* keyboard info */
|
||||
int keys[256]; /* key states 0 up 1 down*/
|
||||
/* keyboard info (indexed by a return from scancode_to_index()) */
|
||||
int keys[SCANCODE_MAX_INDEX + 1]; /* key states 0 up 1 down*/
|
||||
int caps_lock;
|
||||
int scroll_lock;
|
||||
int num_lock;
|
||||
|
||||
/* Unicode input */
|
||||
int last_high_surrogate_key_up;
|
||||
int last_high_surrogate_key_down;
|
||||
|
|
151
xrdp/xrdp_wm.c
151
xrdp/xrdp_wm.c
|
@ -1569,15 +1569,26 @@ xrdp_wm_mouse_click(struct xrdp_wm *self, int x, int y, int but, int down)
|
|||
|
||||
/*****************************************************************************/
|
||||
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;
|
||||
struct xrdp_key_info *ki;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"xrdp_wm_key: RDP scancode:0x%04x, flags: 0x%04x",
|
||||
scan_code, device_flags);
|
||||
scan_code = scan_code % 128;
|
||||
"xrdp_wm_key: RDP key_code:0x%04x, keyboard_flags: 0x%04x",
|
||||
key_code, keyboard_flags);
|
||||
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)
|
||||
{
|
||||
|
@ -1585,32 +1596,25 @@ xrdp_wm_key(struct xrdp_wm *self, int device_flags, int scan_code)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// workaround odd shift behavior
|
||||
// see https://github.com/neutrinolabs/xrdp/issues/397
|
||||
if (scan_code == 42 && device_flags == (KBD_FLAG_UP | KBD_FLAG_EXT))
|
||||
if (keyup)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (device_flags & KBD_FLAG_UP) /* 0x8000 */
|
||||
{
|
||||
self->keys[scan_code] = 0;
|
||||
self->keys[sindex] = 0;
|
||||
msg = WM_KEYUP;
|
||||
}
|
||||
else /* key down */
|
||||
{
|
||||
self->keys[scan_code] = 1 | device_flags;
|
||||
self->keys[sindex] = 1;
|
||||
msg = WM_KEYDOWN;
|
||||
|
||||
switch (scan_code)
|
||||
switch (scancode)
|
||||
{
|
||||
case 58:
|
||||
case SCANCODE_CAPS_KEY:
|
||||
self->caps_lock = !self->caps_lock;
|
||||
break; /* caps lock */
|
||||
case 69:
|
||||
case SCANCODE_NUMLOCK_KEY:
|
||||
self->num_lock = !self->num_lock;
|
||||
break; /* num lock */
|
||||
case 70:
|
||||
case SCANCODE_SCROLL_KEY:
|
||||
self->scroll_lock = !self->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)
|
||||
{
|
||||
// Backend module loaded...
|
||||
if (self->mm->mod->mod_event != 0)
|
||||
{
|
||||
ki = get_key_info_from_scan_code
|
||||
(device_flags, scan_code, self->keys, self->caps_lock,
|
||||
// ..and able to take events. Check the scancode maps to
|
||||
// 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->keymap));
|
||||
|
||||
if (ki != 0)
|
||||
{
|
||||
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)
|
||||
{
|
||||
// Pass keypress on to a widget in the login window
|
||||
xrdp_bitmap_def_proc(self->focused_window,
|
||||
msg, scan_code, device_flags);
|
||||
msg, key_code, keyboard_flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1665,13 +1673,18 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags)
|
|||
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;
|
||||
|
@ -1687,7 +1700,7 @@ get_unicode_character(struct xrdp_wm *self, int device_flags, char16_t c16)
|
|||
char32_t c32 = 0;
|
||||
int *high_ptr;
|
||||
|
||||
if (device_flags & KBD_FLAG_UP)
|
||||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**
|
||||
* 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
|
||||
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,
|
||||
// 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)
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
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 (device_flags & KBD_FLAG_UP)
|
||||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
xrdp_wm_key(self, KBD_FLAG_UP, XR_RDP_SCAN_LSHIFT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, KBD_FLAG_DOWN, XR_RDP_SCAN_LSHIFT);
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
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 (device_flags & KBD_FLAG_UP)
|
||||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
xrdp_wm_key(self, KBD_FLAG_UP | KBD_FLAG_EXT,
|
||||
XR_RDP_SCAN_ALT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, KBD_FLAG_DOWN | KBD_FLAG_EXT,
|
||||
XR_RDP_SCAN_ALT);
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
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 (device_flags & KBD_FLAG_UP)
|
||||
if (device_flags & KBDFLAGS_RELEASE)
|
||||
{
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
xrdp_wm_key(self, KBD_FLAG_UP | KBD_FLAG_EXT, XR_RDP_SCAN_ALT);
|
||||
xrdp_wm_key(self, KBD_FLAG_UP, XR_RDP_SCAN_LSHIFT);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
}
|
||||
else
|
||||
{
|
||||
xrdp_wm_key(self, KBD_FLAG_DOWN, XR_RDP_SCAN_LSHIFT);
|
||||
xrdp_wm_key(self, KBD_FLAG_DOWN | KBD_FLAG_EXT,
|
||||
XR_RDP_SCAN_ALT);
|
||||
xrdp_wm_key(self, device_flags, index - XR_MIN_KEY_CODE);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_LSHIFT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags,
|
||||
SCANCODE_INDEX_RALT_KEY);
|
||||
fake_kbd_event_from_scancode_index(self, device_flags, index);
|
||||
}
|
||||
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)
|
||||
{
|
||||
xrdp_mm_send_unicode_to_chansrv(self->mm,
|
||||
!(device_flags & KBD_FLAG_UP), c32);
|
||||
!(device_flags & KBDFLAGS_RELEASE), c32);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
36
xup/xup.c
36
xup/xup.c
|
@ -171,6 +171,26 @@ lib_mod_connect(struct mod *mod)
|
|||
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);
|
||||
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 key;
|
||||
int rv;
|
||||
int scancode;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "in lib_mod_event");
|
||||
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
|
||||
* the X11 scancode instead, so xorgxrdp doesn't have to do this
|
||||
* work again */
|
||||
if ((param4 & KBD_FLAG_EXT) != 0)
|
||||
{
|
||||
// Extended key - set bit 9 of the scancode for the lookup
|
||||
param1 = scancode_to_keycode(param3 | 0x100);
|
||||
}
|
||||
else
|
||||
{
|
||||
param1 = scancode_to_keycode(param3);
|
||||
}
|
||||
scancode = SCANCODE_FROM_KBD_EVENT(param3, param4);
|
||||
param1 = scancode_to_x11_keycode(scancode);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
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)
|
||||
{
|
||||
g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#define CURRENT_MOD_VER 4
|
||||
|
||||
struct source_info;
|
||||
struct xrdp_client_info;
|
||||
|
||||
struct mod
|
||||
{
|
||||
|
@ -111,6 +112,8 @@ struct mod
|
|||
int total_data_len, int flags);
|
||||
int (*server_bell_trigger)(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 */
|
||||
int (*server_create_os_surface)(struct mod *v, int rdpindex,
|
||||
int width, int height);
|
||||
|
@ -176,7 +179,7 @@ struct mod
|
|||
int (*server_egfx_cmd)(struct mod *v,
|
||||
char *cmd, int cmd_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 */
|
||||
/* common */
|
||||
tintptr handle; /* pointer to self as long */
|
||||
|
@ -198,6 +201,7 @@ struct mod
|
|||
int screen_shmem_id_mapped; /* boolean */
|
||||
char *screen_shmem_pixels;
|
||||
struct trans *trans;
|
||||
char keycode_set[32];
|
||||
};
|
||||
|
||||
#endif // XUP_H
|
||||
|
|
Loading…
Reference in New Issue