Mac에서 Centos 6으로 VNC를 사용할 때 메타 키를 설정하는 방법은 무엇입니까?

Mac에서 Centos 6으로 VNC를 사용할 때 메타 키를 설정하는 방법은 무엇입니까?

Centos 6.9 시스템에서 emacs 26.1을 실행하고 있으며 TightVNC 서버를 통해 Mac OS X 10.14.2에서 실행되는 클라이언트에 표시됩니다. 일을 까다롭게 만들기 위해 Dvořák 키보드 레이아웃도 사용했습니다.

Mac에서 emacs를 실행하면 모든 것이 잘 실행됩니다. 내 Mac 키보드는 입니다 Apple Magic Keyboard with Numeric Keypad (Wireless, Rechargable) (US English) - Silver. option왼쪽이나 오른쪽을 누르면 예상대로 작동하고 metaEmacs에서 빌드됩니다. 왼쪽이나 오른쪽을 누르면 command원하는 대로 작동하고 metaEmacs에서도 빌드됩니다. 나는 이 작업이 다음 방법을 통해 수행된다고 생각합니다(이 방법으로 Linux에서는 문제가 해결되지 않았습니다).

  (setq mac-option-modifier  'meta)
  (setq mac-command-modifier 'meta)

이제 TigerVNC를 통해 Mac에서 Emacs를 실행하는 Linux 시스템에 연결하려고 합니다. Centos 6.9 컴퓨터에서는 Dvorok 키보드 레이아웃 기본 설정이 Mac 키보드에서 입력하는 데 방해가 되었기 때문에 비활성화해야 했고, 변환이 Mac에서 한 번, Linux 컴퓨터에서 두 번, 두 번 수행된 것 같습니다.

그러나 수정자 키가 예상대로 작동하지 않습니다. M-x다양한 방법으로 빌드하려고 할 때 얻은 결과는 다음과 같습니다 .

  • 왼쪽 옵션 -x => 올바르지 않음:
  • 왼쪽 명령 -x => 정답:M-x
  • 올바른 옵션 -x => 올바르지 않음:
  • 오른쪽 명령 -x => 오류:s-x

나는 달렸다 xmodmap -pm:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

나는 달려가 xev다음을 보았습니다.

왼쪽 옵션:

KeyPress event, serial 38, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 19839468, (104,80), root:(106,131),
    state 0x0, keycode 203 (keysym 0xff7e, Mode_switch), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 38, synthetic NO, window 0x2000001,
    atom 0x11c (XKLAVIER_STATE), time 19839468, state PropertyNewValue

PropertyNotify event, serial 38, synthetic NO, window 0x2000001,
    atom 0x11c (XKLAVIER_STATE), time 19839468, state PropertyNewValue

왼쪽 명령:

KeyPress event, serial 38, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 19937256, (103,75), root:(105,126),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

올바른 옵션:

KeyPress event, serial 38, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 19987161, (132,152), root:(134,203),
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) ""
    XmbLookupString gives 1 bytes: (1b) ""
    XFilterEvent returns: False

마우스 오른쪽 버튼 클릭 명령:

KeyPress event, serial 38, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 20026188, (93,166), root:(95,217),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

그래서 나는 다음을 시도했습니다 xmodmap.

! Map the right Macintosh Command key to Meta:
remove mod4 = Super_L
add mod1 = Super_L

! Map the left Macintosh Option key to Meta:
remove mod5 = Mode_switch
add mod1 = Mode_switch

! Map the right Macintosh Option key to Meta:
remove mod5 = ISO_Level3_Shift
add mod1 = ISO_Level3_Shift

이 상태는 다음으로 인해 발생합니다 xmodmap -pm.

xmodmap:  up to 7 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  ISO_Level3_Shift (0x5c),  Alt_R (0x6c),  Super_L (0x85),  Mode_switch (0xcb),  Meta_L (0xcd),  Super_L (0xce)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_R (0x86),  Hyper_L (0xcf)
mod5      

그러나 이것은 나쁘게 동작합니다:

  • 왼쪽 옵션 -x => 올바르지 않음:
  • 왼쪽 명령 -x => 오류:M-b
  • 올바른 옵션 -x => 올바르지 않음:M-≈
  • 오른쪽 명령 -x => 오류:M-b

Dvorak의 "x" 키는 Qwerty의 "b" 키에 해당합니다.

이것을 사용하면 xev이제 다음을 얻습니다.

왼쪽 옵션:

KeyPress event, serial 40, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 20512286, (121,123), root:(123,174),
    state 0x0, keycode 203 (keysym 0xff7e, Mode_switch), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

PropertyNotify event, serial 40, synthetic NO, window 0x2000001,
    atom 0x11c (XKLAVIER_STATE), time 20512286, state PropertyNewValue

PropertyNotify event, serial 40, synthetic NO, window 0x2000001,
    atom 0x11c (XKLAVIER_STATE), time 20512288, state PropertyNewValue

왼쪽 명령:

KeyPress event, serial 40, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 20568312, (140,155), root:(142,206),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

올바른 옵션:

KeyPress event, serial 40, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 20606634, (88,106), root:(90,157),
    state 0x0, keycode 92 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

마우스 오른쪽 버튼 클릭 명령:

KeyPress event, serial 40, synthetic NO, window 0x2000001,
    root 0x3e, subw 0x0, time 20656211, (126,127), root:(128,178),
    state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

meta따라서 이 문제를 해결하고 Dvorak 키보드를 사용하는 Emacs에서 와 같이 두 개의 옵션과 두 개의 명령 키의 원하는 동작을 얻는 방법이 나에게는 명확하지 않습니다 .

관련 정보