마우스 연결 여부에 따라 터치 패드를 어떻게 전환 할 수 있습니까?


10

외부 마우스가 연결되어있을 때 터치 패드를 자동으로 비활성화하고 없을 때 활성화하려고합니다. 사용을 시도 touchpad-indicator했지만 마우스가 연결된 상태에서 컴퓨터가 절전 모드로 전환되고 마우스가 분리 된 상태에서 깨어 난 경우에는 실패합니다.

이 문제를 해결하기 위해 다음 스크립트를 데몬으로 만들려고했지만 제대로 작동하지 않습니다.

#!/bin/bash

declare -i TID
declare -i MID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
MID=`xinput list | grep -Eo 'Mouse\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
if [ $MID -gt 0 ]
then
    xinput disable $TID
else
    xinput enable $TID
fi

나는 시도했다 start-stop-daemon -S -x ./myscript.sh -b

setsid ./myscript.sh >/dev/null 2>&1 < /dev/null &

그리고 nohup ./myscript 0<&- &>/dev/null & 심지어./myscript.sh &

이것들은 모두 4 자리 숫자를 반환합니다. 시작된 프로세스의 PID 여야하지만 lxtask를 시작할 때 "모든 프로세스보기"를 선택 하더라도이 PID에는 프로세스가 없습니다 . 그리고 물론 작동하지 않습니다!


@terdon 연결된 USB 마우스를 보면서 데몬을 만들려고 시도하고 터치 패드를 활성화 또는 비활성화하도록 xinput에 요청합니다. 이 문제에 대한 유일한 다른 해결책, 터치 패드 표시기라는 프로그램에는 약간의 결함이 있습니다. 마우스가 연결된 상태에서 노트북을 잠자고 깨우지 않고 깨우면 터치 패드가 활성화되도록 가장 가까운 마우스를 검색하여 연결 / 연결 해제해야합니다. 요컨대, 깨어 났을 때 그 사실을 다시 확인하고 싶습니다.
mekkanizer

우분투에 오신 것을 환영합니다! 제발 편집 추가 정보를 추가 할 귀하의 질문에, 읽기 어려울 쉬운 코멘트에 미스이다.
terdon

우선, 당신은 "데몬을 디밍하려고 시도하고있다"그리고 당신이 그것에 대해 정확히 어떻게 설명하고 있는지 설명해야합니다. 그런 다음 xinput실행중인 X 서버가 필요하며 데몬으로 물건을 실행하는 대부분의 방법에는 X에 대한 지식이나 연결 능력이 없습니다. 셋째, 당신이하려는 일을 항상 설명 해야하는 주된 이유는 매우 자주 해결책입니다. 누군가가 신청을 시도하는 것은 실제로 그것을 달성하는 방법이 아니며 일반적으로 XY 문제 라고 알려진 잘못된 질문을합니다 .
terdon

@terdon 솔루션 찾기로 돌아가서 xinput의 가능한 아날로그는 무엇입니까? 1. 백그라운드에서 실행할 수 있습니다. 2. 장치를 활성화 / 비활성화 할 수 있습니까?
mekkanizer

1
댓글이 삭제되었습니다 . Ask Ubuntu에 능숙하다는 것은 선택 사항이 아닙니다. 잘 부탁드립니다. 무례한 의견은 경고없이 제거됩니다.
Seth

답변:


10

필요한 기본 스크립트는 다음과 같습니다.

#!/usr/bin/env bash

## Get the touchpad id. The -P means perl regular expressions (for \K)
## the -i makes it case insensitive (better portability) and the -o
## means print only the matched portion. The \K discards anything matched
## before it so this command will print the numeric id only.
TID=$(xinput list | grep -iPo 'touchpad.*id=\K\d+')

## Run every second
while :
do
   ## Disable the touchpad if there is a mouse connected
   ## and enable it if there is none.
    xinput list | grep -iq mouse &&  xinput disable "$TID" || xinput enable "$TID" 
    ## wait one second to avoind spamming your CPU
    sleep 1
done

위 스크립트는 마우스 연결 여부에 따라 트랙 패드를 토글합니다. 시작되면 계속 실행되며 매 초마다 마우스를 확인하여 터치 패드를 비활성화하거나 활성화합니다.

이제 스크립트를로 저장하고 ~/touchpad.sh실행 가능하게하고 ( chmod +x ~/touchpad.sh) GUI 세션 시작 프로그램에 추가하십시오. 사용중인 데스크탑 환경을 지정하지 않았지만 언급 한 이후 lxtask에 사용중인 것으로 가정합니다 LXDE. 어떤 경우에는 여기에서 모두 설명입니다 LXDEUnity:

  1. LXDE의 자동 시작 파일에 스크립트 추가

    echo "@$HOME/touchpad.sh" >> ~/.config/lxsession/PROFILE/autostart file

    "PROFILE"을 LXDE 프로파일의 실제 이름으로 바꾸 었는지 확인하십시오ls ~/.config/lxsession/ . 실행 하여 파일 이름을 찾을 수 있습니다 .

  2. Unity의 자동 시작 파일에 스크립트 추가

    열기 Startup Applications( "스타트 업"에 대한 대시 보드에서 검색)

    여기에 이미지 설명을 입력하십시오

    "추가"를 클릭 한 다음 명령 필드에 스크립트 경로를 붙여 넣으십시오.

    여기에 이미지 설명을 입력하십시오


백그라운드에서 스크립트를 실행하는 것에 대해 Google에서 루프를 사용하지 말 것을 제안했기 때문에 루프를 사용하지 않았습니다. 이것이 유일한 해결책이고 데몬 스크립트 및 CAN 활성화 / 비활성화 장치에 사용할 수있는 xinput의 아날로그가 없다면 ... 좋아요.
mekkanizer

1
@ mekkanizer 이것은 실제로 가장 좋은 방법 은 아닙니다 . 훨씬 깨끗한 방법은 udev 규칙 을 사용 하고 필요한 X 자격 증명 을 내보내는 것입니다. 원한다면 그걸 살펴볼 수 있습니다.
terdon

고마워요 그것이 작동하게되면, 답장을 보내거나 답을 올릴 것입니다.
mekkanizer

10

좋아, 나는 그것을 위해 udev 규칙을 만들었고, @terdon이 말한 것처럼 훨씬 깨끗한 방법이다.

따라서이 안내서 덕분 에 /etc/udev/rules.d/에 "touchpad_toggle.rules"파일을 만들고 (루트 액세스 필요) 두 줄로 채웠습니다.

SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/on.sh"
SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/home/username/off.sh"

"사용자 이름"을 사용자 이름으로 바꾸는 것을 잊지 마십시오!

이 on / off 쉘 스크립트의 내용은 내 질문에 스크립트의 거세 된 버전입니다. 예-off.sh :

#!/bin/bash

declare -i TID
TID=`xinput list | grep -Eo 'Touchpad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
xinput disable $TID

on.sh에서 xinput enable $ TID를 사용해야합니다.

그리고 내 질문에 스크립트 (또는 @terdon이 제안했지만 루프가없는)를 세션 자동 시작에 추가하는 것을 잊지 마십시오.

그게 다지만 한 가지를 추가해야합니다.

Synaptics 터치 패드 (Elantech가 있으므로 나에게 적합하지 않음)가있는 경우 스크립트 (RUN + = 이후에 작성하는 경로)를 간단한 명령 /usr/bin/synclient TouchpadOff=0과 1로 각각 바꿀 수 있습니다.


udev규칙 을 만들려면 루트 액세스 권한이 필요하기 때문에 홈 디렉토리 이외의 위치에 파일을 저장하는 것이 좋습니다. 예를 들면 다음 /usr/local/bin과 같습니다. 또는 /opt/touchpad-toggle/bin/.
Dan

@Dan은 거절했다. 사용자 설정과 관련된 모든 것이 홈 디렉토리에있는 것이 좋습니다. 불행히도 물론 udev 규칙, 로그인 관리자 설정 및 기타 몇 가지 사항은 물론 스냅 샷을 복원하지 않는 한 스크랩 / 파티션 할 때마다 / *로 다시 복사 되도록 운명이 지정 됩니다. 따라서 / home /에 더 많은 것을 저장하는 것은 편리합니다. 따라서 귀하의 조언은 가치가 없습니다
mekkanizer

그러나 그것이 udev 규칙으로 추가 되었기 때문에 누가 그것을 기록했는지에 상관없이 어떤 사용자에게도 실행된다는 것을 의미하지 않습니까?
Dan

공유 PC에서 Linux를 사용한 적이 없기 때문에 확인하지 않았습니다. 어쨌든,이 깔끔한 udev 규칙에 의해 자극을받은 모든 사용자는 내 관심사가 아닙니다. 그들이 너무 민감한 경우, 그들 자신의 설치를 얻을 수 있습니다
mekkanizer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.