우분투의 영구 xmodmap 13.04


72

Ubuntu 13.04에서 xmodmap을 로그인으로 실행할 수 없습니다. askubuntu를 포함하여 주변을 검색했으며 찾은 모든 답변이 작동하지 않습니다.

원하는 매핑이 들어있는 홈 폴더에 .Xmodmap이라는 파일이 있습니다. 수동으로 실행하면 정상적으로 작동하므로 오류가 없습니다. 시작시 실행되도록하기 위해 시도했습니다.

  1. .xinitrc다음 명령 중 하나를 포함하는 다양한 사용 :

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. 동일한 변형 .Xresources대신 사용 .xinitrc.

  3. 시작 응용 프로그램으로 설정

위의 어느 것도 우분투 13.04 (64 비트)에서 작동하지 않습니다. 또한 키보드 매핑을 전역 적으로 변경하는 것에 대한 몇 가지 아이디어를 보았지만 대부분 Ubuntu 13.04 (해당 파일이 지정된 곳에 존재하지 않음)에는 적용되지 않았으며 전역 설정을 터치하지 않는 것이 좋습니다.

답변:


81

우분투는 더 이상을 사용하지 않고 xmodmap대신 사용합니다 xkb(내가 이해하는 한 이것은 창마다 키보드 레이아웃을 용이하게합니다).

시스템 전체 맵 파일은

/usr/share/X11/xkb/symbols/

pc지도는 루트로, 그리고 언어 (예 en:)를 루트의 자식으로하여 계층 적으로로드 된 것으로 보입니다 .

필자의 경우 키보드에서 Page Up with Home 및 Page Down with End를 물리적으로 바 꾸었으므로 pc다음과 같이 시스템 전체 맵을 크게 변경했습니다 .

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

참고 : Xorg에서 새 키보드 맵을 사용하도록하려면 기존의 사전 컴파일 된 맵 (* .xkm) 을 제거 해야합니다 .

/var/lib/xkb/

Xorg를 다시 시작하십시오.

에 대한 다양한 리소스가 xkb있지만 리소스 는 우분투와 관련이 있습니다.


9
Ubuntu 14.04부터는 키를 바꾸는 가장 쉬운 방법입니다. xmodmap을 시작 응용 프로그램에 추가하여 로그인시 실행할 수 있지만 일시 중지, 최대 절전 등의 경우 수동으로 시작하거나 시작 데몬 스크립트를 만들어야합니다.
holocronweaver

수정 자에 따라 키를 다시 매핑 할 수 있습니다 unmodified shift altgr* shift+altgr. 그러나 약 left altsuper key?
Farzher

7
첫 문장이 사실이라고 생각하지 않습니다. 그것에 대한 소스가 있습니까? 키를 다시 매핑하는 "우분투 방식"이에서 키보드 맵을 편집하고 있다고 믿기가 어렵습니다 xkb. 암호가되는 것 외에도 xkb업데이트 시 사용자 지정 맵이 삭제되는 문제가 있습니다 .
Mateus Araújo 2016 년

1
즉, 이것은 우분투에서 키를 다시 매핑하는 유일한 방법입니다.
Mateus Araújo 2016 년

1
더 좋은 방법이 있어야합니다. 매핑하려는 정확한 키 코드를 알고 있지만 키 코드 217은 xkb에도 나열되어 있지 않습니다. 새 키 코드를 추가하는 방법조차 보지 못했습니다.
Jonathan

13

나에게 시스템 설정에서 사용할 수없는 방식으로 1 또는 2 키를 다시 매핑하려면 xkb 구성이 너무 복잡합니다. 또한 솔루션은 '/ usr / share / X11 / xkb / symbols /'등을 편집하지 않고 사용자 측에 남아 있어야합니다. 시작 응용 프로그램을 사용하여 'xmodmap ~ / .Xmodmap'로드를 강제로 중단하면 사용자가 변경 될 때까지만 작동합니다. 키보드 레이아웃을 변경하십시오. 그래서 holocronweaver가 제안한 바와 같이, 내가 찾은 코드 스 니펫을 사용하여 세션 시작시 파이썬 스크립트를로드하여 필요할 때 '~ / .Xmodmap'을 다시로드했습니다.

체크 버그 리포트 # 1243642 (주석 # 6), 그리고 여기에서 다운로드 .


1
여전히 15.10 현재 작업 중 :-) 감사합니다!
lalomartins

이 전설적인 스크립트에 대한 링크가 깨져있는 것 같습니다. 누군가 github에 넣을 수 있습니까?
Epigene

훌륭하고 유일한 실행 가능한 답변! 16.04에서 일하기. 파이썬 3에서 작동하게하려면 "import gobject"를 "gi.repository에서 GObject로 gobject로 가져 오기"로 변경했습니다.
크레이그 cks 스

1
@Epigene - 링크 지금이
크레이그 힉스

찬양하라! 천재가 해결합니다.
dmanexe

6

우분투 14.04 에서이 문제가 있었고 여기서 해결책을 찾았습니다 . 분명히 우분투는 로그인 후 바로 키보드를 구성 할 수는 없지만 조금 나중에 있습니다. 따라서 명령을 추가하면

sleep 4 && xmodmap ~/.Xmodmap &

하는 ~/.bash_profile다음 (이것은 나를 위해 않습니다) 작동합니다.

편집 : 이것은 로그인 한 후에 만 ​​작동하는 것으로 보입니다. 나중에 조사해야합니다.


1
일시 중지 / 최대 절전 모드 후에 실행되도록 설정 한 행운이 있습니까?
Jonathan

안타깝게도 부팅 후에도 작동하지 않습니다. 따라서 부팅 할 때마다 터미널을 열고 다음을 입력합니다. xmodmap ~/.Xmodmap(
dremodaris

우분투 16.04에 당신은 .profile에 사용해야한다는 인식
비터 아벨라

5

사용 Caps LockEsc위해 변환vim

다음은 키 매핑 시작 스크립트의 변형입니다. 이 변환 Caps LockEsc사용하기위한 어떤 키보드 vi, vim또는 gvim.

q4w56 의 답변과 달리이 답변은 무한 while; do루프를 사용하지 않습니다 . 그렇지 않으면 듀얼 코어 CPU 중 하나의 코어가 5 초마다 42 %에 도달하여 랩탑 배터리 충전량이 크게 줄어 듭니다.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

스크립트로 저장하십시오. 로 파일을 실행 가능하게 만듭니다 chmod +x. Session and Startup → Application Autostart(Xubuntu에서) 스크립트 이름과 위치를 추가하십시오 .

이 사용자의 키보드 동작은 재부팅 및 로그 아웃을 통해 지속되지만 일시 중단되지는 않습니다. 일시 중단을 통한 지속성은 달성 될 수 있지만 불행히도 사용자 수준에서는 쉽게 시스템 수준에서만 가능합니다.

이 키보드 리매핑의 이론적 근거

오늘날의 컴퓨팅 세계에서는이 Caps Lock키에 대한 사용이 거의 없습니다 . 일반적으로 네티켓프레젠테이션 및 컨텐츠의 분리 로 인해 모든 CAPS 를 사용하지 않아야 합니다 . 더욱이, 텍스트를 편집하면서 실수로 키를 누르는 것이 항상 즉시 언급 되는 것은 아니지만, 오히려 성가신 행동을 계속합니다. 키를 모두 비활성화하고 키에 쉽게 접근 할 수 있도록 용도를 변경하면 이중 승리를 거둘 수 있습니다.Caps LockvimvimCaps LockEscvim


의 기능을 대체 Caps Lock키 것은위한 진정한 생명의 은인이 될 수 vim의 사용자 없이 애플 맥북 Esc .
Stroobandt Serge

3
그것은 다시 매핑하는 것이 좋습니다 capslockctrl. 이렇게하면 더 많은 문제가 해결되고 Vim에서 capslock+ [를 사용 하여 Esc죄송합니다. 중간에 사용할 수 있지만 제안해야 할 의무가 있습니다.
user907860

일시 중지 란 정확히 무엇입니까? 랩탑 덮개가 닫혀 있습니까? 그 후에 솔루션이 작동하지 않습니까? 랩톱의 뚜껑을 닫은 후 어떻게 vim을 사용합니까?
Marko Avlijaš

@ MarkoAvlijaš How do you use vim after you close the lid on your laptop?물론 뚜껑을 열어서!
Stroobandt Serge

하하 나는 결코 추측하지 않을 것입니다. 그 후 Caps Lock이 더 이상 esc에 매핑되지 않습니까?
Marko Avlijaš

3

fcitx가있는 Ubuntu 16.04에서도 문제가 있었고 fcitx Wiki 에서 해결책이 있었지만 fcitx는 4.2.7 이상이 필요합니다.

  • touch ~/.Xmodmap
  • 구성을 작성하십시오
  • 재부팅하면 fcitx가 자동으로로드를 시도합니다

이유에 대한 설명도 있습니다.


1
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Videonauth

@Videonauth 내 답변을 수정했습니다
Bluethon

대단히 감사합니다 :) 나는 여전히 내 의견을 남기고 리뷰 큐에있는 사람들이 당신이 무언가를 바꾼 것을 볼 수 있습니다.
Videonauth

@Videonauth 이것은 나의 첫 번째 대답이며 영어를 잘 못해서 약간의 잘못을 범했습니다. 그리고 조언을 위해 thx. : P
Bluethon

천만에요. 답변을 제공하는 것은 지역 사회에 기여할 수있는 좋은 방법입니다.
Videonauth

3

@Daniel의 대답은 올바른 길을 가리 켰지 만 계속 확장하고 싶습니다.

Linux Mint 17.2 및 Ubuntu 16.04에서 작동합니다.

나는 계속 사용하려고 생각할 수있는 모든 비틀기를 시도했지만 xmodmap시스템이 절전 모드로 전환되면 모두 실패합니다. setxkbmap* settings-daemon (나를 위해 xfce4 임)이 스크립트보다 늦게 실행되고 순서에 실제로 영향을 줄 수없는 경우에 사용 되는 시작 응용 스크립트도 마찬가지 입니다.

내가 마침내 생각해 낸 것은 다음과 같은 성분이 있습니다.

1)에 대한 최소 키보드 매핑 파일을 작성하십시오 /usr/share/X11/xkb/symbols. 파일을 호출 mylayout할 수 있습니다.

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic 이름입니다. 나중에 다시 만나겠습니다.
  • name[Group1]유사하게 그냥 보이는 이름이지만, 나중에 아무 역할을하지 않습니다.
  • include "us"일반 US 키보드가 포함되어 있습니다. 실제로 us같은 디렉토리에있는 다른 파일입니다. 이것이 우리가 적용하는 키보드 레이아웃입니다. 필요에 따라 다른 것을 선택하십시오. 참고 :이 줄을 끝내는 세미콜론이 없습니다.
  • key라인은 키보드의 한 적응, 더는 따를 수 있습니다. 의 <AE03>파일에서 찾을 수 있습니다 /usr/share/X11/xkb/keycodes. xev프로그램을 사용하여 "3"키에 키 코드 12가 있고 키 코드 파일에이 키 Xfree86가 매핑되어 있는지 확인하십시오 <AE03>.
  • 마지막으로 다른 include키보드 옵션을 활성화하는 또 다른 지시어입니다.이 경우 오른쪽 Alt 키를 레벨 3 Shift 키, 즉 sterling위에서 정의한 기호에 액세스 할 수있는 키로 만들고 싶습니다. 한 섹션이 level3있는 동일한 폴더에있는 파일 이름 일뿐 ralt_switch입니다. 둘러보고 포함해야 할 것을 선택하십시오.

2) 시스템 폴더에 넣지 않았습니다mylayout . 오히려 시스템 폴더에서 원하는 폴더로의 소프트 링크 만 만들었으며 이것이 즉시 소프트웨어가 아님을 알 수 있습니다.

3) 또한 업데이트 번거 로움을 방지하기 위해 다시 수정 하지 않았습니다evdev.xml . 그러나 이것은 키보드 구성 편집기에서 mylayout을 찾는 데 필요합니다 (xfce4의 경우 xfce4-keyboard-settings). 대신 내가 사용 xfce4-settings-editor및 변경 keyboard-layout->XkbLayoutmylayout(파일 이름)와 XkbVariantbasic(위 참조). 그런 mylayout/basic다음 키보드 설정 편집기 에도이 표시됩니다. 의 항목 evdev.xml은 레이아웃을 선택할 수있는 것만 필요합니다.

이런 방식으로 키보드 설정이 절전 모드 및 재부팅 상태를 유지합니다.

http://www.charvolant.org/~doug/xkb/html/node5.html 에서 더 많은 배경을 찾을 수 있습니다 .

휴면 모드 문제를 해결하기위한 또 다른 접근 방식 (자체 시도하지 않음)은 여기 ( https://www.vinc17.net/unix/xkb.en.html) 에서 찾을 수 있습니다 .

업데이트 : 위에서 설명한 것처럼 xfce4-settings-editor에서 설정을 변경 한 순간 Mint 18.3에서 작업했습니다.

업데이트 : 18.04, 디스플레이 관리자 인 gdm3 및 창 관리자 인 XFCE4를 사용하면 ~ / .Xmodmap을 다시 읽은 것처럼 설정 이 일시 중단 된 것처럼 보입니다 . (나는 거의 일시 중단을 사용하지 않으며 랩톱이 실제로 어떤 모드인지 확실하지 않습니다.)


2

개정

2018 년 초에 업데이트가 중단되었습니다. 일시 중지 또는 최대 절전 모드 후 키맵을 자동으로 다시로드합니다. /etc/pm/sleep.d 스크립트를 사용하는 메소드의 작동이 중지되었으므로 (더 이상 사용되지 않습니까?), / lib / systemd / system-sleep 및 약간 다른 스크립팅 (키맵에서 작업을 시작했습니다!)을 사용하는 새로운 방법 만 남았습니다.

따라서이 게시물은 지속성을 위해 새로운 방법으로 업데이트되고 정상적인 초기 키맵로드가 포함되어 작동하기 시작했습니다. .Xmodmap 파일을 .xkbmap으로 변환하는 루틴은 변경되지 않습니다.

이것은 사용자 별 솔루션입니다. 장치 별 답변 은 단일 장치에 키맵을 적용하는 방법을 참조하십시오 . 이 방법은 여기서 사용하기에 적합 할 수 있습니다.

먼저 .Xmodmap 파일을 원하는대로 수정하십시오. .xkbmap 파일보다 직접 편집하기가 더 쉽습니다. 로드 될 때 :

xmodmap .Xmodmap

그런 다음 .xkb 파일로 변환하십시오.

xkbcomp $ DISPLAY $ HOME / .xkbmap

시작시 자동로드하려면 시작 응용 프로그램을 열고 추가를 클릭 한 후 명령 행에 다음을 입력하십시오.

xkbcomp /home/user/.xkbmap ": 0"

( "user"는 실제 사용자 이름으로 대체됩니다.) Name에 Load Keyboard Map을 입력하십시오. 원하는 경우 의견을 추가하고 저장을 누르십시오.

키맵은 이제 시스템이 부팅 할 때마다로드되지만 일시 중단 또는 최대 절전 모드에서는 유지되지 않습니다. 이를 위해 / lib / systemd / system-sleep에 60_xkbmap이라는 새 파일을 작성하십시오.

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( 참조 ) 위와 같이 "사용자"를 실제 사용자 이름으로 바꾸십시오.

키맵은 이제 자동로드되고 지속적으로 유지됩니다. 노트 :

  • 현재 LTS 릴리스, 16.04 및 이후 버전에도 적용됩니다.
  • 위에 링크 된 버그 스레드의 포스트 14 에서 가져온 것 입니다.
  • 이전 게시물은 원래 게시물에 적용되었습니다.

터미널을 시작할 때이 방법을 지금 시도하고 있습니다. 경고 : <AB11>에 대해 정의 된 기호 없음 (키 코드 97) 경고 : <JPCM>에 대해 정의 된 기호 없음 (키 코드 103) 경고 : <I120> (키 코드 120)에 대해 정의 된 기호가 없습니다. ...... 그 결과가 아직 어떤 것인지 잘 모릅니다. 누구 알아?
잃어버린 아기

위에서 언급 한 경고에도 불구 하고이 방법은 일시적으로 만 작동하지만 잠시 후에 매핑이 잊혀지고 슈퍼 키가 기본 기능으로 돌아갑니다. 다른 방법으로 시도해 보겠습니다. Mac에서 기본 편집 바로 가기를 다시 매핑하여 Command 키 대신 Control 키를 사용하고 작동하는지 확인합니다. cut-copy-paste-undo-redo 명령이 Mac과 Ubuntu에서 동일하기를 원합니다. 무언가를 복사하거나 붙여 넣을 때마다 검색 메뉴가 우분투에 나타날 때 매우 좌절합니다.
잃어버린 아기

1

우분투 12.04에서 13.04로 업그레이드했을 때도 우연히 발견되었습니다.

운 좋게도이 설정은 키보드 환경 설정에서 쉽게 액세스 할 수 있으며 항상 마우스를 클릭하여 변경할 수 있습니다.

  1. 시스템 설정 > 키보드 레이아웃 > 옵션 ...으로 이동하십시오 .
  2. 키보드 레이아웃 옵션에서 화살표를 클릭하여 ▸ Ctrl 키 위치 옵션 을 표시하십시오 .
  3. Swap Ctrl and Caps Lock에 체크 표시를하십시오 .

왼쪽 컨트롤과 Caps Lock의 위치가 바뀌 었습니다.

~/.Xmodmap변경 한 후에는 삭제하는 것을 잊지 마십시오 .


이것은 xmodmap을 다루지 않기 때문에 다운 투표되었을 수 있지만 실제로 Gnome Tweak을 사용하는 것이 일부 매핑이 이상하게 작용 한 이유 일 수 있음을 발견 한 방법이었습니다.
dragon788

16.04에 표시되지 않습니다. 여전히 가능합니까?
chrismarx

1
@ chrismarx 아니요, 제거했습니다. 요즘 (16.04)에 설정 XKBOPTIONS="ctrl:swapcaps"했습니다 /etc/default/keyboard.
glts

0

이 스크립트를 시작에 만족시키는 것을 발견했습니다.

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

을 사용해 보았지만 xmodmap ./Xmodmap실행될 때마다 눈에 띄는 지연이 발생합니다.


4
무한 while; do루프 의 사용은 피해야합니다. 듀얼 코어 CPU 중 하나의 코어가 5 초마다 42 %에 도달 하여 랩탑 배터리 충전량이 크게 줄었습니다!
Stroobandt Serge
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.