Linux의 xinput 출력에서 ​​장치 ID와 일치하는 문자열을 인쇄합니다.

Linux의 xinput 출력에서 ​​장치 ID와 일치하는 문자열을 인쇄합니다.

터치패드를 자동으로 비활성화/활성화하는 스크립트를 작성하려고 하는데 bash이를 i3wm위해 xinput. 스크립트의 아이디어는 서로 다른 컴퓨터 간에 쉽게 전송할 수 있도록 하는 것이므로 터치패드의 장치 ID를 자동으로 추출하려고 합니다.

$ xinput                                                                    
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DLL07BE:01 06CB:7A13 Mouse                id=14   [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=22   [slave  pointer  (2)]
⎜   ↳ DLL07BE:01 06CB:7A13 Touchpad             id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD: Integrate           id=13   [slave  keyboard (3)]
    ↳ Intel HID events                          id=16   [slave  keyboard (3)]
    ↳ Intel HID 5 button array                  id=17   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=18   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=19   [slave  keyboard (3)]

나는 그것을 구현해 보았고 내가 달성한 최고는 다음과 같습니다 id.Touchpadawk

$ xinput | awk '/Touchpad/ && /id=/ { print $6 } '                          
id=15

문제는 여섯 번째 열이 매번 장치 ID가 아니기 때문에 먼저 포함하는 행을 가져온 Touchpad다음 다음 숫자를 인쇄 id=하고 첫 번째 공백/탭을 잘라야 한다는 것입니다.

답변1

의 경우 xinput명령이 필요합니다.장비매개변수(예: --enable device)는 장치의 이름이나 ID를 사용할 수 있습니다.

예를 들어, 다음 둘 다 동일합니다.

xinput --enable 'DLL07BE:01 06CB:7A13 Touchpad'
xinput --enable 15

장치의 전체 이름을 미리 모르는 경우 출력을 사용하여 xinput --list --name-only일치하는 이름을 찾으십시오.

xinput --list --name-only | grep Touchpad
xinput --enable "$(xinput --list --name-only | grep Touchpad | head -n 1)"

man 1 xinput이 옵션은 에 설명된 대로 --list장치 매개변수도 허용합니다 . 따라서 특정 이름의 ID를 인쇄할 수 있습니다.

xinput --list --id-only 'DLL07BE:01 06CB:7A13 Touchpad'

또는 ID가 부여된 이름:

xinput --list --name-only 15

답변2

sed다음과 같은 목적 으로 사용할 수 있습니다 .

xinput | sed '/Touchpad/s/.*id=\([0-9]*\).*/\1/;t;d'

이렇게 하면 패턴이 발견된 줄의 전체 내용을 패턴의 숫자로 바꾸는 캡처 그룹을 사용하여 TouchpadID 부분만 효과적으로 인쇄하고 일치하지 않는 줄(끝 부분)을 무시합니다.id=digits\([0-9]*\);t;d

답변3

아래의 단일 awk 명령을 사용하면 제대로 작동합니다.

테스트를 거쳐 잘 작동함

xinput |awk '/Touchpad/{for(i=1;i<=NF;i++){if ($i ~ /id/){print $i}}}' 

산출

id=15

관련 정보