이런저런 이유로 왼손으로 마우스를 사용한지 꽤 오래되었다.
요즘은 OS가 좋아져 왼손마우스 설정을 다 지원하기 때문에,
특별히 이용에 불편함을 느끼지는 않는다.
(다른 사람들이 내 컴퓨터를 이용할때는 불편해 하지만. ㅎㅎ)
하지만, 한가지 문제가 있는 경우가 있는데,
원격데스크탑 연결을 이용하는 경우이다.
컴1과 컴2가 있고, 모두 왼손마우스로 설정되어 있는경우,
컴1에서 컴2로 원격데스크탑 연결을 하면,
각자의 왼손마우스 설정이 먹히면서 오른손 마우스가 되어 버린다.
컴2가 어쩌다가 쓰는 녀석이면 모르겠는데,
자주쓰는 녀석이면 이게 보통 성가신 것이 아니다.
나같은 경우는 데스크탑으로는 작업환경의 효율성 때문에 맥미니를 쓰고,
이동장비로 노트북(이런저런 호환성을 고려하여 Windows XP를 쓴다.)을 사용한다.
여러장비를 사용하다보면, 자료의 sync 라던가, 작업환경 단일화 등의 문제가 있어서,
자리에 있을때는 맥미니에서 rdesktop 으로 노트북을 연결해 사용하기 때문에,
앞에서 말한 왼손마우스의 문제가 발생하게 된다.
이리저리 검색해봐도, 신통한 해결책이 없었다.
역시 소수자의 삶이란 피곤할 수 밖에 없는 것인지...
마침내 찾은 해결책은 rdesktop 의 소스를 고쳐버리는 것.
마우스 좌우버튼을 바꾸는 옵션을 추가, 컴파일해서 맥미니에 깔아버렸다.
오픈소스의 장점! ^^;
닫기
diff -r -p rdesktop-1.5.0/rdesktop.c rdesktop-1.5.0_naondol/rdesktop.c
*** rdesktop-1.5.0/rdesktop.c 2006-08-07 20:45:43.000000000 +0900
--- rdesktop-1.5.0_naondol/rdesktop.c 2007-05-09 10:45:47.000000000 +0900
*************** BOOL lspci_enabled = False;
*** 91,96 ****
--- 91,97 ----
BOOL g_owncolmap = False;
BOOL g_ownbackstore = True; /* We can't rely on external BackingStore */
BOOL g_seamless_rdp = False;
+ BOOL g_swap_button = False; /* flag for mouse button swap */
uint32 g_embed_wnd;
uint32 g_rdp5_performanceflags =
RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS;
*************** usage(char *program)
*** 164,169 ****
--- 165,171 ----
fprintf(stderr, " -z: enable rdp compression\n");
fprintf(stderr, " -x: RDP5 experience (m[odem 28.8], b[roadband], l[an] or hex nr.)\n");
fprintf(stderr, " -P: use persistent bitmap caching\n");
+ fprintf(stderr, " -w: swap mouse button\n");
fprintf(stderr, " -r: enable specified device redirection (this flag can be repeated)\n");
fprintf(stderr,
" '-r comport:COM1=/dev/ttyS0': enable serial redirection of /dev/ttyS0 to COM1\n");
*************** main(int argc, char *argv[])
*** 427,433 ****
#endif
while ((c = getopt(argc, argv,
! VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
{
switch (c)
{
--- 429,435 ----
#endif
while ((c = getopt(argc, argv,
! VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEmzwCDKS:T:NX:a:x:Pr:045h?")) != -1)
{
switch (c)
{
*************** main(int argc, char *argv[])
*** 647,652 ****
--- 649,658 ----
g_bitmap_cache_persist_enable = True;
break;
+ case 'w':
+ g_swap_button = True;
+ break;
+
case 'r':
if (str_startswith(optarg, "sound"))
diff -r -p rdesktop-1.5.0/xkeymap.c rdesktop-1.5.0_naondol/xkeymap.c
*** rdesktop-1.5.0/xkeymap.c 2006-08-07 20:45:44.000000000 +0900
--- rdesktop-1.5.0_naondol/xkeymap.c 2007-05-09 10:40:36.000000000 +0900
*************** extern int g_win_button_size;
*** 49,54 ****
--- 49,55 ----
extern BOOL g_enable_compose;
extern BOOL g_use_rdp5;
extern BOOL g_numlock_sync;
+ extern BOOL g_swap_button;
static BOOL keymap_loaded;
static key_translation *keymap[KEYMAP_SIZE];
*************** xkeymap_translate_button(unsigned int bu
*** 735,745 ****
switch (button)
{
case Button1: /* left */
! return MOUSE_FLAG_BUTTON1;
case Button2: /* middle */
return MOUSE_FLAG_BUTTON3;
case Button3: /* right */
! return MOUSE_FLAG_BUTTON2;
case Button4: /* wheel up */
return MOUSE_FLAG_BUTTON4;
case Button5: /* wheel down */
--- 736,752 ----
switch (button)
{
case Button1: /* left */
! if (g_swap_button)
! return MOUSE_FLAG_BUTTON2;
! else
! return MOUSE_FLAG_BUTTON1;
case Button2: /* middle */
return MOUSE_FLAG_BUTTON3;
case Button3: /* right */
! if (g_swap_button)
! return MOUSE_FLAG_BUTTON1;
! else
! return MOUSE_FLAG_BUTTON2;
case Button4: /* wheel up */
return MOUSE_FLAG_BUTTON4;
case Button5: /* wheel down */
Trackback Address :: http://naondol.snucs.org/tt/trackback/52