특정 키 또는 장치를 어떻게 다시 매핑합니까?


236

우분투에서 특정 키를 다시 매핑하는 방법을 찾고 있습니다.

나는 변경하려면 PgUpHomePgDownEnd.

Ubuntu / GNOME에 내장 명령 또는 도구가 재 할당 키를 가지고 있습니까?


내 답변을 확인 하십시오 . 동일한 답변을 복사하여 붙여 넣을 가치가 없습니다. 아마도 그것은 당신을 도울 것입니다.
Rahul Virpara

1
단위 단계에 대한 CTRL-P / N에 대한 Emacs와 같은 바인딩이 있습니까?
Léo Léopold Hertz 준영

시간 xmodmap이 더 이상 사용되지 않기 때문에 ! 시스템 전체 설정을 사용하려면 사용해야 xkb합니다. 언어 파일을 편집 /usr/share/X11/xkb/symbols/하여 변경 사항을 추가하십시오. askubuntu.com/a/898462/34298
rubo77를

답변:


249

공지 : 2013 년부터 Ubuntu 및 파생 상품은 더 이상을 사용하지 않고 xmodmap대신을 사용 xkb합니다. 자세한 내용은 이 답변을 참조하십시오 . 아래 답변은 더 이상 현재 릴리스와 관련이 없습니다.


특정 키를 다시 매핑하려면 두 가지 도구가 필요합니다. 첫 xev (명령 줄 도구) 및 두 번째 xmodmap (명령 줄 도구) 둘 다 추가 설치없이 Ubuntu에서 사용할 수 있어야합니다.

  1. 터미널 창을 시작하고 실행하십시오 xev. 이제 활성화되어 있으며 키를 누를 때까지 기다립니다. 그런 다음 동작을 변경하려는 키를 누르십시오. 즉 PgUp.

  2. xev누른 키에 대한 정보를 출력합니다. 세 번째 줄이 중요합니다. 다음과 유사해야합니다.

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    이 예에서 현재 Prior키가 할당 된 동작의 이름이며 숫자 키코 드는 키를 인식하기위한 내부 ID입니다. 이제 즉, 다른 키를 사용하여이 작업을 수행 PgDown이 출력을 제공

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    여기서 다시 우리에게 흥미로운 부분은 keycode 115Next- 동작의 이름.

  3. 이제 두 키를 바꾸려면을 사용하십시오 xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    키보드의 키 코드 110이있는 키가 동작으로 바뀝니다 Next. 꽤 간단합니다.

    키와 함께 사용될 때 매핑하는 키가 다른 의미를 가져야하는 경우 Shift(예 : 영국식 키보드 레이아웃의 경우 Shift+ 2는 따옴표를 제공함) 첫 번째 명령 다음에 보조 명령을 간단히 나열 할 수 있습니다. 예를 들어 코드 53이있는 키를 정상적으로 백 슬래시에 매핑하지만 shift와 함께 사용하는 경우 막대 기호에 매핑하려면 다음을 수행하십시오.

     xmodmap -e "keycode 53 = backslash bar"
    

추가 정보 : 이러한 매핑의 순서는 Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. 열을 건너 뛰려면을 사용하십시오 NoSymbol. 또한, 여기에 모든 keysyms의 포괄적 인 목록입니다.

참고 : 이러한 변경 사항은 활성 X 세션에만 적용되며 재부팅 후 손실됩니다. 변경 사항을 영구적으로 저장하려면 위의 명령 다음에 다음 명령을 실행해야합니다.

xmodmap -pke >~/.Xmodmap

( .Xmodmap홈 디렉토리 ( ~)에 이름이 지정된 파일을 만듭니다 )

그런 다음 .xinitrc명령을 넣을 홈 디렉토리에 이름이 지정된 파일을 작성해야합니다 xmodmap .Xmodmap.

이제 콘솔에서 수정 .Xmodmap하고 실행 xmodmap .Xmodmap하여 변경 사항을 즉시 확인할 수 있습니다 . 변경 사항 .Xmodmap이 지속됩니다.

출처 : 우분투 포춘

보너스 물건 :

다시 매핑하는 키가 상태에 따라 다른 동작을하는 경우 (숫자 키보드의 키가 NumLock에 의존하는 방식 등) xmodmap -pm수정 자 목록을 가져 오기만하면됩니다 .

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

예를 들어 숫자 키보드에서 쉼표 대신 마침표를 원하지만 (대부분의 프로그래머에게 유용함) NumLock이 꺼져있을 때 "삭제"동작을 유지하려고한다고 가정하십시오.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2때문에, xmodmap -pm이 우리에게 mod2있다 Num_Lock, 다른 이름의 키를 눌러 얻을 수있다 xev.


3
xevFn키 누르기 를 잡을 수 없음
om-nom-nom

3
선택한 답변이 Ubuntu 12.10에서 Caps-lock 키를 다시 매핑하는 데 작동하지 않았습니다. 키 및 대체 동작 목록이있는 시스템 설정-> 키보드-> 레이아웃 설정-> 옵션으로 이동하여이 작업을 수행 할 수있었습니다. Unity와 터미널에서 완벽하게 작동했습니다.
Allyl Isocyanate

1
여러 개의 키보드가 연결되어있는 경우 이러한 도구가 다른 키보드의 동일한 키와 다른 점이 있습니까?
stommestack 2016 년

1
이상하게도 모든 작업을 수행했지만 다시 시작한 후에도 키맵이 재설정됩니다.
Costa

1
-event우분투 12.04에 깃발 이 없다고 생각 합니다. 오류가 발생하고에 "event"가 언급되어 있지 않습니다 man xev.
동 형사상

20

Shift 키를 이동하려는 경우 몇 가지 추가 단계가 있습니다.

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

+1 수정 자에 대한 모든 것의 가장 유닉스 답입니다 (iBook 2와 함께 이전에 그렇게 했으므로 Enter 키를 사용하여 Control_R의 기능을 원했지만 세부 사항을 잊어 버렸습니다).
rbrito

2
Lenovo 노트북에서 키보드를 사용하는 사용자에게 중요한 답변
Einar Ólafsson

16

방금 후유증을 겪었습니다. "재 맵핑"을 통해 완전히 다른 의미를 가질 수 있다고 생각합니다.하지만 제 대답은 그대로 두겠습니다 ... (하나의 키를 다시 할당하는 방법을 모르겠습니다. 다른 사람처럼 행동)

업데이트 : 내 '사후 생각'이 확인되었습니다. (나는 틀린 질문에 답했다 :) ... NES의 Community Wiki answer (위에서 허용)를 참조하십시오.

리 바인드 키 를 다시 매핑 하는 일반적인 두 가지 방법이 있습니다 .

  • 특정 프로그램에 로컬로
    (키는 다른 응용 프로그램 / 창에서 다른 것들에 사용될 수 있습니다)
  • 특정 사용자를위한 전 세계
    (키는 모든 창에서 동일한 기능을 가짐)

'프로그램에 대한 로컬'메소드의 경우 때때로 앱 자체에서 제공하는 키 바인딩을 변경하는 방법이 있습니다 (예 :

Firefoxkeyconfig 라는 애드온이 있습니다 ... 일부 정보는 MozillZine 게시물을 참조하십시오

대부분의 Ubuntu 프로그램은 Gnome 기반이며 이러한 Gnome 앱의 모든 메뉴 항목에 대한 키 바인딩을 수정하는 특정 유틸리티가 Editable Menu Accelerator있습니다. 를 실행하여 gconf-editor(터미널 또는 Alt + F2를 통해이) ...로 이동 desktop- gnome- interface선택 can_change_accels당신은 당신이 좋아하는 가상 아무것도 메뉴 항목을 변경할 수 있습니다 .... (프로그램 / 창 당) ... 난 당신이 사용하지 제안 필요한 것을 마치 자마자 ..

그렇지 않으면 글로벌 단축키를 설정할 수 있습니다. xbindkeys 라는 프로그램을 사용 xbindkeys 설치하고 Main Menu-Preferences를 통해 사용할 수있는 옵션도 있습니다.Keyboard Shortcuts

xbindkeys를 사용하는 경우 "시작 응용 프로그램"(기본 메뉴-기본 설정)에 추가해야합니다. 또한 (Stefano Palazzo에서 제안한대로) 이전에 xbindkeys에 대한 자세한 설명을 작성했습니다. 아스 쿠분투 페이지


+1, 아주 좋아요! 제안 : 당신은 다른 질문큰 대답 을이 질문 에 통합해야하며 , xbindkeys의 구성 형식을 약간 설명해야 할 수도 있습니다.
Stefano Palazzo

1
다른 키 할당에 대한 내용은에 의해 처리 될 수 있습니다 .man xdotoolpage를 확인하십시오 . 이 문제 를 해결하는 데 사용했습니다 .
Stefano Palazzo

최근에 xmod라는 도구와 함께 xmodmap이라는 도구를 사용하는 또 다른 접근법을 찾았습니다. xmodmap과 xbindkeys의 차이점이 무엇인지 모르지만 이것은 나에게 잘 작동합니다. 도구를 사용하여 명명 된 두 가지를 선호하는 조언이 있습니까? 다음은 xmodmap 및 xev를 설명하는 매우 유용한 단계별 안내서입니다. ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES

@NES .. 잘못된 점을 해결 한 것 같습니다. 실제로 특정 키가 OS에 의해 해석되는 방식, 즉 비표준 키보드 해석을 다시 매핑하려고하는 것처럼 보입니다. 표준 키보드 해석 및 기본 키 할당 오버로드 (당신이 무엇을하고 있는지는 왼쪽과 오른쪽 마우스 버튼을 바꾸는 것과 비슷하다고 생각합니다.) .. 글쎄, 내 대답이 잘못된 것에 대해 좋았던 것 같습니다 :)
Peter.O

예,하지만 문제 없습니다. 대답도 흥미 롭습니다. 위의 링크를 게시 한 단계별 가이드가 올바른 방법이었습니다. 그래서 다른 사용자가 좋은 가이드를 가지고있는 솔루션으로 짧은 답변을 게시 할 것입니다. 감사 프레드
NES

9

ENTER키 매핑을 키로 전환하는 방법은 다음과 같습니다 SHIFT.

$ uname -a

보고서 :

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

보고서 :

/usr/bin/xmodmap

$ which xev

보고서 :

/usr/bin/xev

$ xev

(다음 50 줄 정도는 무시하십시오)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

중요한 것은 각 키 누르기의 세 번째 줄입니다.

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

매핑 반전 :

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

결과를 저장하십시오.

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

더하다

 xmodmap ~/.Xmodmap

$ sudo reboot

주요 문제는 반전이 작동하지 않았다는 것입니다. ENTER키는 매핑 된 SHIFT_R키; 그러나 SHIFT_R키가 키에 매핑되지 않았습니다 ENTER. 그림을 이동.


7

X와 독립적으로 전역 리맵을 수행하기 위해 대신 console-setup (5) 을 사용할 수 있습니다 .

내 경우에는 내가 다시 매핑 원 Caps Lock의 열쇠를 D내 때문에, D- 키가 고장 :)

먼저 dumpkeys (1) 을 사용 하여 매핑을위한 템플릿을 얻었습니다. D-key 의 경우 흥미로운 점은 키 코드 32 (내 키보드)에 대한 매핑입니다. grep 패턴에는 두 개의 공백이 있습니다.

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

지도를 변경하려면 Caps Lock(키보드의 키 코드 58) 대신

sed 's/32/58/' -i tempfile

이제 읽습니다

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

이 리맵을 기본 맵에 추가하려면 콘솔 설정을 위한 리맵 포함 파일에 추가하기 만하면 됩니다.

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

콘솔 설치는 (낮은 우선 순위의 질문을 건너 뛰는 재구성 할 필요가있다 -phigh)

sudo dpkg-reconfigure console-setup -phigh

이제 다시 매핑이 완료되고 부팅시 자동으로로드됩니다.


3

에 대한 바로 가기를 만드는 데 하루 종일 보냈습니다 Ctrl+Pageup.

처음 시도 xmodmap했지만 수정 자 이벤트를 생성 할 수 없습니다. 따라서 Control이벤트와 같은 바로 가기를 생성하는 것은 불가능합니다 .

그런 다음로 시도 xbindkeys했습니다 xmacro. 그런 종류의 작품이지만 xbindkeys내 시스템에서와 같은 일부 주요 조합을 캡처 할 수 없습니다 Alt + ___.

최종적으로 Unity의 키보드 단축키-> 사용자 정의 단축키를 사용하여 단축키를 설정했습니다.

그리고 대신 xmacro, 이제 xvkbd키보드 이벤트를 생성하기 위해 프로그램을 사용 했지만 개인 취향 일뿐입니다. 모두 xmacroxvkbd거의 같은 작동합니다. 한 가지 추가 팁은 지연 매개 변수를 추가 xmacro하거나 xvkbd이벤트가 유실되지 않도록하는 것입니다.


2

나에게 Software Center의 AutoKey가 가장 효과적이었습니다. 직관적 인 GUI가 있으며 새 바인딩을 추가하려면 새로 만들기-> 문구를 클릭하십시오.

  1. 이름을 추가하고 확인을 클릭하십시오.
  2. "구문 설정"섹션에서 붙여 넣기 사용이 키보드로 설정되어 있는지 확인하십시오
  3. 사용하려는 핫키 추가
  4. 예를 들어, 왼쪽 화살표 키를 에뮬레이트하기 위해 텍스트 필드에 명령을 추가하십시오- <left>특수 키 목록은 여기에 있습니다.

이 설정하는 PERFEKT 일 Super+CSuper+VCtrl+CCtrl+V. Mac에서 VirtualBox를 통해 Ubuntu를 사용할 때 완벽한 솔루션
Ben

그러나 이렇게해도 이러한 바로 가기를 수신하는 다른 명령은 비활성화되지 않습니다. Super+V"알림 목록 표시" 를 비활성화하려면 설정-> 장치-> 키보드로 이동하여 비활성화하십시오.
Ben

@ Ben yup, 다른 앱의 바인딩을 표시하면 좋을지 모르지만 케이크에 착빙하는 것입니다. 내 문제는 "Fn"키를 다시 매핑 할 수 없다는 것입니다. 나는 uhk 키보드를 사용해보기로 결정했다. os와 독립적으로 프로그래밍 할 수있는 것이 어떻게되는지 볼 것이다.
자아

0

특정 프로그램의 키만 다시 매핑해야하는 경우이 기능을 hax11에 추가 했습니다.

나는 변경하려면 PgUpHomePgDownEnd.

hax11로이를 수행하려면 ~/.config/hax11/profiles(예 :)에서 프로그램의 프로파일 구성 파일을 열고 다음 ~/.config/hax11/profiles/usr\lib\firefox\firefox을 추가하십시오.

Enable=1
MapK112=K110
MapK117=K115
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.