Caps Lock 키를 다시 매핑하여 오디오를 재생할 수 있습니까?


16

16.04 MATE에서 유용한 기능을 위해 쓸모없는 Caps 잠금 키를 재사용하려고합니다. 나는 건너왔다

setxkbmap -option ctrl:nocaps

예를 들어 VLC를 재생 / 일시 정지하기 위해 다시 매핑 할 수 있습니까? 답변 주셔서 감사합니다!


나는 이것이 효과가 있다고 생각하지 않습니다 ... 여러 가지 이유로 ... 예를 들어, 리눅스는 capslock을 별도의 키가 아닌 수정 자로 취급한다고 생각합니다 . 아마도 VLC에 바인딩 할 수없는 이유 일 것입니다. 또한 비활성화하면 비활성화됩니다. 그러나 당신은 커맨드 라인에서 놀아서 그것을 묶으려고 시도 할 수 vlc --key-play-pause <key-string>있지만, VLC가 capslock으로 받아 들일 문자열을 찾지 못했습니다 ...
Robert Riedl

1
나는 dconf-editor몇 가지를 시도하고 설치 하고 몇 가지를 xdotool시도했으며 마침내 xbindkeys몇 가지를 시도했습니다. 이 무과실 운동이 끝나면 키보드 일시 정지 / 재생 버튼이 끊어지고 내 화면 재생 / 일시 정지 버튼이 회색으로 표시되고 음악이 재생되지 않습니다. 16.04 에서이 작업을 수행하여 18.04에서 재부팅하여 모든 것이 여전히 작동하는지 확인하고 소프트웨어 해킹이었습니다. 유일한 절약 은혜는 PC가 아닌 안드로이드 폰을 통해서만 음악을 재생한다는 것입니다. 다른 사람들이주의를 기울여 당신이하는 일을 나보다 더 잘 문서화 해 두십시오.
WinEunuuchs2Unix

1
@pbhj 팁 감사합니다. 어떻게 든 우분투 16.04의 화면 버튼과 키보드 일시 중지 / 재생 버튼으로 재생 / 일시 정지를 다시 수행 할 수있었습니다. 나는 사람들에게 이러한 저수준 키보드 유틸리티를 실험 할 수있는 함정에 대해 경고하고 싶었다.
WinEunuuchs2Unix

1
2BFrank : 문제가 해결되면 답변 중 하나를 수락하십시오. 이 질문에 현상금이 있기 때문에 답변을 수락하지 않으면 (수동으로 현상금을 수여하지 않음) @Sebastian Stark에게 현상금의 절반 만 수여합니다. 그의 답변이 가장 높은 투표 수이기 때문입니다.
Nonny Moose

1
@NonnyMoose이 의견에 감사드립니다. 승인 된 답변 또는 최고 투표 총액으로 자동 승급하도록 두려고했지만 수상이 절반으로 줄었다는 것을 몰랐기 때문에 약 2 시간 내에 총 2 회 만에 최고 투표 총액으로 수여합니다. 응답이 없습니다.
차이 티 렉스

답변:


11

evtest와 dbus

다음은 백그라운드에서 실행되는 작은 스크립트와 관련된 버전입니다. 몇 가지 쉬운 단계를 수행해야합니다.

  • 설치 evtest 프로그램을 : sudo apt install evtest. 이 프로그램은 /dev/input/장치 계층 에서 원시 이벤트를 디코딩하고 인쇄 할 수 있습니다.

  • 그룹에 사용자 계정을 추가하십시오 input. 로그 아웃 한 후 다시 로그인하십시오. (이것은 /dev/input/일반적으로 루트 또는 그룹의 사용자 만 수행 할 수있는 아래의 일부 장치에서 읽을 것이기 때문에 필요합니다 input. 우리는 스크립트를 루트로 실행할 수는 있지만 어떤 사용자에게 알려주는 방법을 찾아야합니다 dbus 인스턴스와 대화해야합니다.)

  • Capslock 키를 비활성화하거나 해당 메이트 기본 설정을 사용하십시오. 많은 사람들처럼 Capslock 키를 Ctrl에 매핑하면 작동합니다.

  • 예를 들어 다음 스크립트를 어딘가에 저장하고 $HOME/bin/capshack실행 가능하게 만드십시오.

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

위의 스크립트는 키보드 이벤트를 듣고 capslock 키를 누르면 명령을 실행합니다. 실행중인 명령은 dbus를 사용하여 실행 / 일시 중지 이벤트를 실행중인 VLC 인스턴스로 보냅니다. KEYBOARD실제 키보드를 가리 키도록 변수 를 조정해야 할 수도 있지만 위의 값이 효과가있을 수 있습니다.

capslock 키 를 놓을 때 toggleVLC () 함수를 호출 EVENT하려면 스크립트 에서 변수 value 0대신로 끝나 도록 변수를 변경할 수 있습니다 value 1.

또한 capslock 키의 키 코드가 58과 다를 수도 있습니다.을 실행하여이를 확인 evtest하고 capslock을 누를 때 출력을보고 EVENT 변수를 적절히 조정할 수 있습니다. 키 코드로 일치시킬 필요가 없으며 EVENT를 간단히로 설정하십시오 (KEY_CAPSLOCK), value 1.

evtest와 위의 스크립트를 사용하는 대신 triggerhappy 패키지 에서 thd를 사용할 수 thd --dump /dev/input/*있지만 비슷한 결과를 줄 수 는 있지만 교육 수준이 약간 떨어졌습니다.

이제 백그라운드에서 스크립트를 자동으로 시작하는 사용자 시스템 단위를 만듭니다.

  • 사용자 시스템 계층을 작성하십시오. mkdir -p $HOME/.config/systemd/user

  • 파일에 다음 텍스트를 추가하십시오 $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • 방금 만든 서비스 유닛을 활성화하십시오 : systemctl --user enable capshack

  • 서비스를 시작하십시오 : systemctl --user start capshack

이제부터 capslock 키를 사용하여 VLC에서 재생 / 일시 정지를 전환 할 수 있습니다. 로그인 할 때 백그라운드 스크립트가 자동으로 시작되어야합니다.

방아쇠

이미 언급했듯이 triggerhappy 패키지를 사용하여이를 수행 할 수도 있습니다. 이것은 시스템을 사용하지 않고보다 견고한 솔루션을 선호하는 사람들에게 선호되는 방법입니다.

  • input위와 같이 그룹에 사용자 추가

  • 패키지를 설치하십시오 : sudo apt install triggerhappy

  • triggerhappy에 대한 구성을 다음에 추가하십시오 ~/.config/thd/capslock.conf.

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • 다음과 같이 thd를 실행하십시오. thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • capshack에 대해 설명한 것과 비슷한 방식으로 사용자를 위해 실행하십시오.

  • 각 키를 누를 때마다 두 번 토글되지 않도록 언급 된 메소드 (capshack 또는 thd) 중 하나만 실행해야합니다.

나는 표준 세션과 16.04 메이트에서 18.04 에이 모든 것을 테스트했습니다. 그러나 이론적으로는 웨이 랜드 또는 다른 데스크탑 환경에서도 작동해야합니다.


@ WinEunuuchs2Unix 언급 해 주셔서 감사합니다. 필자는 개인적으로 전체 if / then / else 절의보다 장황한 스타일을 선호합니다. 이 경우 실제로는별로 중요하지 않습니다.
Sebastian Stark

줄이 너무 깁니다. 최근에 나는 첫 번째 줄 [[ test ]] && \ 과 두 번째 줄이 <command>포지티브 테스트에서 실행되도록 두 줄로 코딩 스타일을 조정했습니다 . 내 추천은 대부분의 프로그래밍 언어에 익숙하지 않기 때문에 가독성에 전적으로 동의합니다.
WinEunuuchs2Unix

이것은 대단하다! 비록 그것이 triggerhappy가야할 것 같아 보이지만 evtest실제로는 디버깅 프로그램 이기 때문에 :)
Robert Riedl

예, evtest 학습의 : 수행하기위한
세바스찬 스타크

... 어쨌든 키 코드 58은입니다 m. 그래서 스크립트가 작동하지 않습니다. xmodmap -pke | grep Caps_Lock이 스크립트를 사용하기 전에 키 코드가 올바른지 확인하는 것이 좋습니다 .
Nonny Moose

9

우분투 16.04에서 인터넷 검색 및 바이올린을 켜는 시간을 보낸 이후 dconf-editorxbindkeys나는 매우 쉬운 솔루션을 발견 :

  • 2 분 안에 매우 빠른 설정
  • xdotool 만 설치하면됩니다
  • 스크립트가 필요하지 않습니다
  • 대문자 잠금은 여전히 ​​인식되지만 문자 대소 문자를 전환하지 않습니다
  • 표준 Ubuntu 키보드 사용자 정의 바로 가기 설정과 함께 작동

그놈 XF86AudioPlay지원이 필요한 경우 OP가 명시한 VLCxdotool 에는 필요하지 않습니다 .

sudo apt install xdotool

이제 까다로운 부분이 있습니다. Caps LocK키를 누를 때마다 음악이 재생과 일시 중지간에 전환 될 때마다 대문자도 사용 또는 사용 중지됩니다.

키를 계속 활성 상태로 유지하면서 Caps Lock 토글을 끄려면이 방법을 사용하십시오.

setxkbmap -option caps:none

그놈을 고수하는 음악 플레이어

그런 다음 Ubuntu 16.04에서 설정 >> 키보드 >> 바로 가기 >> 사용자 정의 바로 가기로 이동하십시오 .

오디오 일시 정지 재생 단축키 .png

  • 설정 이름Audio Play
  • 설정 명령xdotool key XF86AudioPlay
  • 그런 다음 Apply버튼을 클릭하십시오

새 옵션을 추가하면 할당 된 바로 가기 키가 Disabled로 표시 됩니다. 사용 안함을 클릭하고 키를 지정하라는 프롬프트가 표시되면 키를 누르십시오 Caps LocK.


VLC와 같은 음악 플레이어

이전 섹션에서 Gnome에 대한 단계를 따르십시오. 그러나 명령에 대해서는 대신 다음을 사용하십시오.

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC 가 미디어 키를 인식하지 못하는 경우 : 키보드 미디어 키를 VLC와 함께 사용할 수있는 방법은 무엇입니까? 키보드에 내장 된 경우에도 마찬가지입니다. 따라서 XF86AudioPlay에 대한 사용자 정의 키보드 단축키는 쓸모가 없습니다 xdotool.


명령 행에서 사용자 정의 키보드 단축키 설정

이 Q & A는 명령 행에서 사용자 정의 키보드 단축키를 설정하는 방법에 대해 설명합니다. 터미널에서 사용자 정의 키보드 단축키를 설정하는 방법은 무엇입니까?


캡을 영구적으로 비활성화

다음 단계는 setxkbmap -option caps:none재부팅시 이를 지속적으로 유지 하는 것 입니다. 인터넷 검색 결과 Terdon의 답변 : setxkbdmap 설정 저장 :

쉬운 방법은 $HOME/.profile파일에 명령을 추가하는 것입니다 (없는 경우 만들 수 있습니다).

setxkbmap -option caps:none

로그인 할 때마다 실행되어야합니다.

참고 사용하도록 $HOME/.profile하기보다는 $HOME/.bash_profile, $HOME/.bashrc또는 기타 유사한 파일. 로그인 관리자가이 설정을 읽어야하기 때문입니다.


단순하고 우아하며 업무를 수행합니다. 나에게 완벽한 답변입니다!
Fabby

@Fabby 글쎄, 설정과 테스트가 쉽고 스크립트에 대한 저수준 뭉크가 필요하지 않음을 인정해야합니다. 나는이 방법에 걸려 넘어지기 전에 네 가지 다른 시도를 겪었다. 여전히 완벽하지는 않지만 감사합니다! . 그들이 다시 유럽으로 돌아 오게하면 파인트를 사 줄게.
WinEunuuchs2Unix 2018 년

Wayland와 함께 작동합니까?
danzel

@dabzel Wayland가 작동하지 않을까 두려워 setxkbmap -option caps:none합니다. 유틸리티 프로그램이 설치되어 있지만 Wayland는 대문자와 소문자를 계속 전환합니다. Wayland를 존중하는 방법에 대한 별도의 질문을 게시 할 수 setxkbmap있습니다.
WinEunuuchs2Unix

3

이 답변은 VM의 Ubuntu MATE 16.04.4 LTS에서 테스트되었지만 키보드는 패스 스루의 USB 키보드이므로 차이가 없어야합니다. 또한 추가 소프트웨어가 필요하지 않으며 패키지를 설치하지 않고 바닐라 설치에서 수행 할 수 있으며 부팅간에 지속됩니다.

캡 잠금 재 맵핑

  1. 파일 /usr/share/X11/xkb/symbols/pc을 루트로 편집하십시오 . 쉼표를 잊어 버리는 등 실수를하지 않도록주의하십시오. 더 이상 키보드를 사용하지 않으면 키보드를 사용하지 못할 수도 있습니다. (내가 어려운 것을 배운 것 같아?)

  2. 라인을 주석 처리

        key <CAPS> {    [ Caps_Lock     ]   };
    

    //시작 부분에 두 개의 슬래시 ( )를 배치하여

  3. 그 아래에 다음 줄을 추가하십시오.

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. 라인을 주석 처리

        modifier_map Lock   { Caps_Lock };
    

    위와 같은 방식으로.

  5. 재부팅하십시오.

참고 : (이 부분 을 지적하기 위해 신용을 danzel변환 ) 패키지를 업데이트하면 xkb-data이 파일을 덮어 쓸 수 있습니다. 이를 방지하기 위해 합리적으로 안전한 방법은을 사용하여 경로를 전환하는 것 dpkg-divert입니다. (이 파일의 업스트림 소스가 3 년 안에 수정되지 않았기 때문에 "합리적으로 안전합니다"라고 말합니다.

대체 방법

키보드 레이아웃 설정에서 Caps Lock 키를 수동으로 비활성화 한 다음 이 답변 의 접근 방식을 사용 하여 고유 한 키 다시 매핑을 추가하십시오.

문제?

캡 잠금 키가 더 이상 캡을 잠그지 않으며이 시점에서 재생 / 일시 정지하도록 다시 매핑되었습니다. 이제 VLC에서 음악을 재생 및 일시 정지 할 수 있어야합니다. 이 시점에서 작동하면 나머지 지침을 건너 뛸 수 있습니다.

그러나 그것을 시도했을 때 VLC는 Play / Pause 키에 응답하지 않았습니다.

키보드 단축키가 올바르게 설정되어 있는지 확인하십시오

  1. 키보드 단축키 열기 (시스템 → 환경 설정 → 하드웨어 → 키보드 단축키)

  2. "재생 (또는 재생 / 일시 정지)"이 "XF86AudioPlay"로 설정되어 있는지 확인하십시오.

  3. 그렇지 않은 경우 "바로 가기"섹션을 클릭하고 새 재생 / 일시 정지 키를 눌러 바로 가기를 설정하십시오. 유용한 스크린 샷

  4. 여전히 작동하지 않으면 몇 번 재부팅하여 제대로 측정하십시오. (실제로 나를 위해 고쳐 놓은 것입니다.)


xkb옵션, 특히 옵션을 방해 할 수 caps:...있습니다. 또한 시스템 업데이트로 덮어 쓸 수도 있습니다.
danzel 2018 년

실제로 가능합니다. 그러나 시스템 업데이트에 대한 좋은 지적입니다. 나는 이것에 대한 메모를 대답에 추가 할 것입니다. 피드백을 주셔서 감사합니다!
Nonny Moose

모두에게, 와우! 죄송합니다 : afk 잠시 동안 :-) 그리고 지금 당신이 솔루션에 넣은 모든 노력을 발견하고 있습니다 !! @ WinEunuuchs2Unix 답변을 시도하고 계속 게시하십시오. 고마워, LLAP !!
2B 프랭크

@ 2BFrank 호기심으로, 효과가있는 답변을 찾았습니까?
Nonny Moose

1

설치 xbindkeys, xcapeplayerctl을 . 있는지 확인 xcape(매핑 CapsLock과 같은 여분의 키에 Alt+F12의한 xcape -e 'Caps_Lock=Alt_L|F12)과 playerctl로그 - 인에 자동으로 시작되며, 파일에 추가 ~/.xbindkeysrc두 줄을

"playerctl play-pause"
  Alt + F12

0

Capslock 키를 재생 / 일시 정지 키로 설정

이 솔루션은 capslock 키의 스캔 코드를 커널 입력 드라이버의 다른 키 코드 (이 경우 재생 / 일시 중지)에 다시 매핑합니다.

장점

  • 기존 시스템 파일을 수정할 필요가 없습니다 (새 파일 하나만 작성하면 됨)
  • 응용 프로그램은 실제로 Capslock 키임을 알지 못하지만 실제 재생 / 일시 정지 키를 눌렀다 고 생각합니다.
  • Capslock을 비활성화 할 필요가 없으며 xkb구성 을 엉망으로 만들 가능성이 없습니다.

단점

  • 각 키보드에 대해 개별적으로 수행해야합니다 (상황에 따라 이점이 될 수 있음).

전제 조건

  • evtest (를 통해 설치 가능 sudo apt-get install evtest)

순서

터미널에서 sudo evtest키보드를 실행 하고 선택하십시오. 키를 누를 때 출력이 없으면 Ctrl+를 누르고 C다른 장치를 사용해보십시오. 선택한 장치 이벤트 번호를 기억하십시오. 나중에 필요합니다. Capslock 키를 누릅니다. 다음과 같은 일부 줄이 나타납니다.

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

MSC_SCAN줄 앞의 KEY_CAPSLOCK줄에 값이 필요합니다 . 위의 예에서 이것은 70039이지만 키보드의 스캔 코드는 다를 수 있습니다.

이제 다음 명령을 실행하되 X를 evtest명령에 사용한 장치 이벤트 번호로 바꾸십시오 .

grep "" /sys/class/input/eventX/device/id/*

...이 출력됩니다 bustype, product, vendor그리고 version키보드.

라는 이름의 파일 작성 65-keyboard-custom.hwdb/etc/udev/hwdb.d/다음과 같은 내용으로 (루트 권한이 필요)를 :

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...어디

  • [bus], [vendor], [product] 및 [version]은 정확히 4 자이며 대문자는 대문자 여야합니다.
  • [scancode]는 소문자 여야합니다
  • evdev:...라인은 없습니다 에는 앞의 공간을
  • KEYBOARD_KEY...라인이 정확히 하나 개의 앞 공간을

예를 들면 다음과 같습니다.

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

마지막으로, 새 구성을 하드웨어 데이터베이스로 컴파일하십시오.

sudo systemd-hwdb update

변경 사항을 즉시 적용하려면 udev에 알리십시오.

sudo udevadm trigger

변경 사항을 되돌리려면 생성 한 파일을 제거하고 재부팅하십시오.

이 주제에 대한 나의 원래 답변 에서 더 자세한 정보를 찾을 수 있습니다 .


@Nonny Moose 때문에 "각 키보드마다 개별적으로 수행해야합니다"라고 썼습니다. 또한 원하는만큼 키보드를 지정할 수 있으므로 구입하는 모든 새 키보드에 대해서만이 작업을 수행하면됩니다. 반면, 키보드에는 이미 물리적 재생 / 일시 정지 키가 있으므로 원하는 경우 키보드를 생략 할 수 있습니다.
danzel 2018 년

... 글쎄, 난 관심을 기울이지 않았다. 나는 정정되었다.
노니 무스

0

아마도 사용 xbindkeys하거나 XTE그렇게 할 수 있습니다. 그러나 먼저 키 코드가 무엇인지 확인하십시오 xev. 터미널에서 명령 을 사용하여 capslock 키의 코드를 볼 수 있습니다 (게임 마우스를 포함한 모든 키 또는 마우스 버튼의 키 코드를 볼 수 있음). Capslock 및 Play 버튼의 키 코드를 사용하면 xbindkeys confi 파일을 편집하고 변경 사항을 저장할 수 있습니다. 사용 touch ~/.xbindkeysrc(시스템이 자동으로 생성하지 않는 경우) 설정 파일을 작성하고 nano ~/.xbindkeysrc편집 할 수 있습니다. 나는 지난 달에 그것을 사용했고 여기에 시험이 있습니다. 귀하에게 매우 유용한 링크를 살펴보십시오.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

게임용 마우스에서 키보드 키로 버튼을 다시 매핑

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/

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