복사하여 붙여 넣기에 Super + C Super + V 바인딩


23

한동안 저는 키보드와 Windows 키 (Super_L)를 복사하여 붙여 넣기에 바인딩하는 데 관심이있었습니다. 데스크탑과 MacBook 사이에 편리 성과 일관성이 있습니다.

xmodmap에 대해 읽고 다음을 실행 한 후에 가까이 있다고 생각했습니다.

$ # re-map Super_L to Mode_switch, the 3rd col in keymap table `xmodmap -pke`
$ xmodmap -e "keycode  133 = Mode_switch"

$ # map Mode_switch+c to copy
$ xmodmap -e "keycode  54 = c C XF86_Copy C"

$ # map Mode_switch+v to paste
$ xmodmap -e "keycode  55 = v V XF86_Paste V"

불행히도 XF86Copy 및 XF86Paste는 전혀 작동하지 않는 것 같습니다. 그것들은 나열되어 /usr/include/X11/XF86keysym.h있으며 xev키 시퀀스가 ​​X에 의해 XF86Paste 및 XF86Copy로 해석되고 있음을 보여줍니다. 이러한 기호가 실제로 작동합니까? 응용 프로그램 수준의 지원이 필요합니까?

답변:


18

Super를 Ctrl에 바인딩

왼쪽 Windows/Logo/Super키를 다른 Ctrl키로 사용 하도록 바인딩하는 것은 어떻습니까?

다음 xmodmap 명령으로이를 달성 할 수 있습니다.

remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L

위의 줄을 저장했다고 가정하면 super_as_ctrl.xmodmap효과를 테스트하여 실행할 수 있습니다.

xmodmap super_as_ctrl.xmodmap

변경 사항을 영구적으로 유지하려면 (재 로그인 / 재부팅 후에도) .Xmodmap홈 폴더에서 파일 이름을 바꿉니다 .

(위의 내용은 Ubuntu 11.10 라이브 시스템에서 테스트되었지만 다른 Linux 배포판에서도 동일해야합니다.)


터미널 프로그램의 복사 / 붙여 넣기 바로 가기 조정

바인딩 데 SuperCtrl당신이 지금 사용할 수있는 Super-C거의 모든 곳에서 복사 할 수 있습니다. 유일한 일반적인 예외는 터미널 프로그램입니다. 그러나 바로 가기를 재정의 할 수 있습니다.

나는 심지어 gnome-terminal지금 까지이 옵션을 가지고 있음을 알았습니다 ( Ctrl-Shift-C어쨌든 익숙해 질 때까지는 없었 습니다). 그 중 하나를 사용하는 경우 Edit / Keyboard Shortcuts...메뉴 로 이동 Ctrl-C하여 복사 Ctrl-V하여 붙여 넣도록 지정하십시오 . konsole등등 과 유사해야합니다 .

걱정하지 마십시오. 단축키를 사용하여 프로그램을 종료하는 기능을 잃어 버리지 않습니다. 터미널의 복사 바로 가기를 리 바인드 한 후에는 이전에 Ctrl-Shift-C사용한 것처럼 사용할 수 있습니다 Ctrl-C. Shift 키를 눌렀는지 여부는 터미널을 구분하지 않습니다. 그리고 바로 가기는 더 이상 복사본에 걸리지 않습니다. 또는 MountainX가 그의 답변에서 제안한 것처럼 종료를 다른 바로 가기로 리 바인드합니다.


XF86Copy 등이 작동하지 않습니다

복사 및 붙여 넣기에 대한 주요 기호 관련 : 효과가 없습니다. Shift-ScrollLock에 복사 작업을 할당하여 신속하게 테스트했습니다 (사용되지 않았으며 수정자가 아닌 키로 테스트하고 싶었습니다).

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

눌러도 XF86AudioMute와 아무런 효과가 없습니다. 그러나 문자 'a'를 할당 할 때 작동했습니다. 따라서이 XF86 특수 키 기호에 특정 문제가있는 것 같습니다.


3
불행히도 Super를 Ctrl에 바인딩하더라도 여전히 터미널 내에서 복사하여 붙여 넣으려면 Ctrl / Super + Shift + C를 사용해야합니다. 이는 기본 인센티브입니다. XF86 키가 작동하지 않는지 확인하십시오.
솔로

어떤 터미널 프로그램을 사용하십니까? 나는 적어도 gnome-terminal과 작동하는 솔루션을 추가했습니다. 그리고 다른 사람들과 비슷해야합니다.
zpea

4
메타에 컨트롤 바인딩은 Meta + c / v로 복사 / 붙여 넣기에 대한 변경 바로 가기와 다릅니다. Linux에서 MacO를 kboard 바로 가기로 만들려고하므로이 답변은 훌륭하지 않습니다 ...
Sonique

1
Shift + Ctrl + C 또는 너무 어색하고, 무엇이든 바로 슈퍼에 킬 (kill) 신호를 보내드립니다 Ctrl 키에 슈퍼 리 바인딩 + C 그래서 정말 많이 해결되지 않습니다
rien333

첫 번째 단계는 대략 super / command를 제어로 전환하는 것입니다. 그것은 대부분의 문제를 해결하지만 cmd가 다른 곳에서 ctrl을 의미하더라도 cmd-c와 ctrl-c가 다른 기능을 갖기를 여전히 원합니다. xmodmap 및 터미널 별 바로 가기를 사용하여이 작업을 수행 할 수 있는지 잘 모르겠습니다.
tedder42

9

Super + x, Super + c, Super + v 형식의 일부 시퀀스 만 Ctrl + x, Ctrl + c, Ctrl + v와 같은 다른 시퀀스에 바인딩하려는 경우 (예 : 원하는 OP) 특정 수퍼 키 시퀀스는 일반적으로 시스템에서 수퍼 키의 다른 용도에 영향을주지 않으면 서 잘라 내기 및 붙여 넣기에 매핑되며 XKB 확장 만 사용하면 가능합니다. 아래 절차는 단계를 간략하게 설명하고 두 가지 시작 키보드 설정에 대한 두 가지 세부 사항의 예를 제공합니다. 잘만되면 그것은 당신의 시스템에 적응하기에 충분한 정보를 제공 할 것입니다. 시스템에서 파일을 포함하여 파일을 작성하고 편집하는 데 익숙하다고 가정합니다 /usr/share/X11/xkb.

  1. XKB 구성 트리가 상주 할 위치를 결정하십시오. 먼저 시스템을 찾으십시오. 일반적으로 / usr / share / X11 / xkb에 있으며, 존재하지 않는 경우 어떻게 찾는 지 확실하지 않습니다. "xkb"라는 디렉토리를 시스템에서 검색 할 수 있습니다. 어쨌든 일단 시스템을 찾으면 시스템을 수정하거나 원하는 디렉토리를 사용할 수 있습니다. 시스템 디렉토리를 사용하는 것의 장점은 변경 사항을 훨씬 더 쉽게 호출 할 수 있다는 것입니다. 그러나 향후 시스템 업데이트가 변경 사항을 겹쳐 쓸 수 있습니다 (경고). 어쨌든, 이후에 언급 된 모든 파일 이름은이 디렉토리와 관련이 있으며, 필요한 경우 $ XKBLOCAL $로 참조하고 모든 명령은 현재 디렉토리라고 가정합니다.

  2. 현재 x, c, v 키의 XKB "유형"키를 결정하십시오. 가장 쉬운 방법은 명령을 사용하는 것입니다 xkbcomp -a $DISPLAY - | grep -C 6 c,(쉼표는 의도적으로 패턴에 포함되어 있음). 첫 번째 예제 설정에서 다음을 생성합니다.

    key <AB02> {
        type= "ALPHABETIC",
        symbols[Group1]= [               x,               X ]
    };
    key <AB03> {
        type= "ALPHABETIC",
        symbols[Group1]= [               c,               C ]
    };
    key <AB04> {
        type= "ALPHABETIC",
        symbols[Group1]= [               v,               V ]
    };
    key <AB05> {
    

    반면에 다른 예제 설정에서는

    key <AB02> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               x,               X, approxeq,     dead_ogonek ]
    };
    key <AB03> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               c,               C, ccedilla,        Ccedilla ]
    };
    key <AB04> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               v,               V, squareroot,           U25CA ]
    };
    key <AB05> {
    

    결론은 첫 번째 예에서 관련 키는 "ALPHABETIC"유형이고 두 번째 예에서는 "FOUR_LEVEL"유형입니다. 키보드 설정에 따라 다른 유형일 수도 있습니다. 다음에서이 유형을 $ TYPE $라고하며 실제 문자열 ALPHABETIC 또는 아래 명령의 다른 항목으로 바꿔야합니다.

  3. $ TYPE $의 정의를 찾아 $ XKBLOCAL $ / types 디렉토리의 새 파일로 복사하십시오. 이를 수행하는 명령은 다음과 같습니다 xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste.. 내가 선택한 파일 "cutpaste"의 이름은 임의적이며 원하는 이름을 사용하지만 이후 단계에서이 파일을 일관되게 참조해야합니다. 첫 번째 설정에서이 파일은 내용을 가져옵니다.

    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };
    

    다른 예에서는 내용을 얻습니다.

    type "FOUR_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    
  4. 파일 형식 / 잘라내기를 편집하여 두 가지 작업을 수행합니다. 프리앰블 및 포스트 앰블을 추가하여 적절한 XKB 절로 만들고 형식 이름과 형식 정의를 변경하여 Super에 해당하는 수정자가 생성 한 수준을 한 단계 더 추가합니다. 시스템에 해당 수정자가 무엇인지 확인해야하며 아래에 사용 된 Mod4 일 가능성이 큽니다. 필요한 수정 사항은 두 가지 유형의 최종 버전 / 절단 붙여 넣기에서 분명해야합니다.

    default partial xkb_types "addsuper" {
        type "ALPHABETIC_SUPER" {
            modifiers= Shift+Lock+Mod4;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[Mod4]= Level3;
            map[Shift+Mod4]= Level3;
            map[Lock+Mod4]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Caps";
            level_name[Level3]= "With Super";
        };
    };
    

    default partial xkb_types "addsuper" {
        type "FOUR_LEVEL_SUPER" {
            modifiers= Shift+LevelThree+Mod4;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Mod4]= Level5;
            map[Shift+Mod4] = Level5;
            map[LevelThree+Mod4] = Level5;
            map[Shift+LevelThree+Mod4] = Level5;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "With Super"';
       };
    };
    
  5. 두 번째 단계에서 grep에 의해 출력 된 키 기호 정의를 두 번째 새 파일 기호 / 잘라내기에 복사하고 유사한 프리앰블 및 포스트 앰블을 추가하고 새 유형을 사용하도록 정의를 수정하고 정의에 조치를 추가하여 원하는 키를 처리하십시오. 슈퍼 버전으로 제작되었습니다. 두 가지 예에서이 결과는 다음과 같습니다.

    default partial xkb_symbols "superversions" {
        replace key <AB02> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               x,               X, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               c,               C, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               v,               V, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    default partial xkb_symbols "superversions" {
        replace key <AB02> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    두 번째 예에서는 라인 길이를 약간의 제어하에 유지하기 위해 (중요하지 않은) 공백을 짜 냈습니다.

  6. XKB가 현재 사용중인 규칙 세트의 이름을 찾으십시오. 쉽습니다 setxkbmap -query. 의 결과에 표시 됩니다. 제 경우에는 "evdev"였습니다.

  7. rules / evdev (또는 규칙 세트 이름이 무엇이든)의 시스템 버전을 $ XKBLOCAL $ / rules / evdev에 복사하고 작성한 옵션을 가리키는 규칙을 추가하십시오. 여기에는 두 가지 선택 사항이 있습니다. 모든 evdev 또는 실제로 사용중인 키보드 모델, 레이아웃, 변형 및 옵션을 언급 한 부분 만 복사 할 수 있습니다. 물론 시스템 파일을 제 위치에서 수정하는 경우 복사 할 필요없이 편집 만하면됩니다.

    이 경우 추가되는 것은 초기 키보드 설정에 관계없이 동일하므로 한 가지 예만 있습니다. 당신과 함께 시작하는 규칙 파일의 섹션을 발견 ! option = symbols하고이 줄을 추가 cutpaste:super = +cutpaste해당 섹션에, 그리고 당신은 또한 규칙 파일의 섹션을 찾아 그와 시작 ! option = types및 라인 cutpaste:super = +cutpaste해당 섹션에뿐만 아니라.

  8. evdev.lst의 시스템 버전을 복사하고 새 옵션에 대한 행을 추가하십시오. 이 파일의 이름은 단순히 .lst가 추가 된 규칙 파일의 이름과 일치합니다. 이전 단계에서와 같이 전체 파일을 복사하거나 사용중인 모델, 레이아웃, 변형 및 옵션에서 참조하는 부분 만 복사 할 수 있습니다. 이 파일에서 시작하는 섹션을 찾아 다음 ! option과 같은 행 cutpaste:super Add super equivalents of cut and paste operations을 해당 섹션에 추가하면됩니다 .

  9. 이제 모든 구성 파일이 준비되었습니다. 시스템 파일을 수정 한 경우을 사용하여 새 옵션을 호출 할 수 있습니다 setxkbmap -option cutpaste:super. 반면에, 그렇지 않은 경우 setxkbmap에게 $ XKBLOCAL $ 디렉토리의 위치를 ​​알려 주어야합니다. 더 나쁜 것은 서버가 해당 디렉토리의 위치를 ​​알지 못하고 setxkbmap이 알 수 없거나 서버가 다른 시스템에서 실행될 수 있기 때문에 불가능하다는 것입니다. 따라서 setxkbmap의 출력을 xkbcomp로 파이프하고 $ XKBLOCAL 디렉토리의 위치를 ​​명령에 알려야합니다. 따라서 전체 명령 행은 setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY입니다.

좋은 XKB 문서 / 참조가 드물기 때문에 이것은 누군가에게 도움이되고 / 관심이 있기를 바랍니다. 매우 유용한 참고 자료는 http://madduck.net/docs/extending-xkb/ 입니다.


훌륭한 답변입니다. 이것은 17.10에서 나를 위해 일했다
blockloop

우분투 18.04에서는 작동하지 않았습니다. 결과적으로 단순히 'c', 'x'및 'v'키가 더 이상 작동하지 않습니다. 나는 그들과 함께 다시 일할 수있었습니다 setxkbmap -option. 부분 심볼 파일에서 제외 된 일부 Group2, Group3 심볼을 제외하고 내 로컬 설정은 FOUR_LEVEL 예제와 거의 동일했으며 내 파일은 예제와 동일하게 보입니다.
JinnKo

2

여기 내가하는 일이 있습니다. 그것은 궁극적 인 해결책은 아니지만 궁극적 인 해결책을 얻으려고 노력했지만 많은 노력을 기울인 후에는 도달 할 수 없었습니다. 그래서 나는 간단하고 내가 필요한 것의 90 % 이상을 위해 작동하는 무언가를 결정했습니다. 몇 분 만에 내가 방문하는 모든 컴퓨터 (또는 새로운 Linux 설치)에서 구현할 수 있습니다. 간단합니다.

X 터미널 응용 프로그램에서 바로 가기 환경 설정을 지정하십시오. 나는 Gnome과 KDE 에서이 작업을 수행했습니다. 예를 들어 Konsole에서 메뉴> 설정> 바로 가기 구성으로 이동하십시오. 그놈 X 터미널에도 비슷한 메뉴가 있습니다. 바로 가기 (예 : "복사")를 선택하고 원하는 키 시퀀스를 입력하십시오.

터미널 복사 및 붙여 넣기 바로 가기가 터미널 명령과 충돌하는 경우 쉽게 해결할 수 있습니다. 예를 들어, 누군가 CTRL-C를 복사에 사용하려면 (X 터미널이 CUA 표준을 준수) 어떻게해야합니까?

이 경우 .ttyrc에서 stty 키 바인딩을 쉽게 변경할 수 있습니다. 복사 예를 위해 CTRL-C를 계속하면 인터럽트 키가 CTRL-b ( "break")가되어야한다고 가정하십시오. 이것은 다음을 달성합니다.

echo "stty intr \^b" >> ~/.bashrc 

그런 다음 .bashrc를 소스하십시오.

X 터미널 설정을 사용하여 바로 가기를 변경 한 다음 선택적으로 한 줄 에코 명령으로 stty와의 충돌을 해결하는 것처럼 전체 솔루션이 간단합니다. 간단하고 내가 필요한 거의 모든 것을 다룹니다.


0

아마도 Windows 키는 수정 자 키입니다. 이것을 실행하고 다시 시도하십시오.

xmodmap -e 'remove Mod4 = Super_L'

고마워,하지만 트릭을하지 않습니다. xev가 XF86 이벤트를보고하기 때문에 매핑이 작동한다는 것을 알고 있습니다.
솔로

내 첫 번째 게시물 ( xmodmap -e 'remove Mod1 = Meta_L'명령을 실행 하고 시도한 후)은 나에게 잘 작동했습니다.
ussr

1
@solo와 작동 여부에 관계없이 모든 데스크탑 환경이나 응용 프로그램이 지원하지는 않습니다. 실제로 작동하는지 확인하려면 Firefox에서 사용하십시오. X 키 바인딩을 지원합니다.
ussr

0

글렌 휘트니가 말한 내용 중 일부를 취해 맥 OS의 단어 걱정이나 텍스트 조작 동작을 사용자 정의 키맵으로 매핑하는 데 지식을 사용했습니다.

특정 솔루션을 사용하지 않고 Ctrl vs Super copy and paste 문제를 이미 해결했지만 다른 것에는 매우 도움이되었다고 말했습니다. Wayland를 어느 시점에서 완벽하게 지원하기 위해 xmodmap과 같은 것을 피했습니다. Kinto는 기본 xkb를 사용하며 터미널 동작과 같은 예상되는 macOS를 존중합니다.

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

여기 요점도 있습니다. 핵심 요소가 무엇인지 확인하고 싶다면 필요할 때 키 맵을 대체하지 않습니다. Gist에는 Cmd 및 화살표 키를 사용하는 macOS 스타일 커서 / 단어 조작을 설정하는 사용자 정의 xkb 키맵 파일도 포함되어 있지 않습니다.

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

요지 내용

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

# If the hid_apple driver is not loaded for Apple keyboards, which can be found out
# by the lsmod command then the above setxkbmap commands will not work
# Use the following commands for Apple style keyboards without an hid_apple driver
#
# Note: this could also apply to hid_apple driver as well 
# if this option is set to 0 inside swap_opt_cmd
#
lsmod | grep hid_apple

# Apple keyboard without hid_apple - GUI
setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl,ctrl:swap_rwin_rctl

# Apple keyboard without hid_apple - Terminal
setxkbmap -option;setxkbmap -option altwin:alt_super_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.