코딩 연습

omarchy 리눅스에서 마우스 연결시 touchpad 자동 on/off 본문

Linux

omarchy 리눅스에서 마우스 연결시 touchpad 자동 on/off

코딩아저씨 2025. 12. 2. 15:17
반응형

일단 적당한 디렉토리에 touch_toggle.sh 라는 파일을 다음과 같은 내용을 만든다.

 

#!/bin/bash

# 마우스 연결 상태에 따라 터치패드를 제어하는 스크립트 (최종 수정본)

# 1. 현재 그래픽 세션을 사용하는 사용자 이름과 ID를 찾습니다.
HYPR_USER=$(pgrep -x Hyprland | xargs -r ps -o user= -p | head -n 1)
if [ -z "$HYPR_USER" ]; then
  # 사용자를 못 찾으면 /tmp에 로그를 남기고 종료합니다.
  echo "toggle_touchpad: HYPR_USER not found at $(date)" >> /tmp/toggle_touchpad_fallback.log
  exit 1
fi
HYPR_UID=$(id -u "$HYPR_USER")

# 2. 로그 파일을 사용자별로 고유하게 설정하여 권한 충돌을 방지합니다.
LOG_FILE="/tmp/toggle_touchpad_${HYPR_USER}.log"

# 3. Hyprland 인스턴스 서명 경로를 올바르게 설정합니다. ($XDG_RUNTIME_DIR/hypr/)
# udev(root) 환경에서는 XDG_RUNTIME_DIR이 없으므로 직접 경로를 만듭니다.
HYPRLAND_SIGNATURE_PATH="/run/user/${HYPR_UID}/hypr/"

echo "---" >> "$LOG_FILE"
echo "Script triggered with action: $1 at $(date)" >> "$LOG_FILE"
echo "Running as user: $(whoami), targeting user: $HYPR_USER (UID: $HYPR_UID)" >> "$LOG_FILE"

if [ ! -d "$HYPRLAND_SIGNATURE_PATH" ]; then
    echo "Error: Hyprland signature directory not found at $HYPRLAND_SIGNATURE_PATH" >> "$LOG_FILE"
    exit 1
fi

export HYPRLAND_INSTANCE_SIGNATURE=$(ls -1 "$HYPRLAND_SIGNATURE_PATH" | head -n 1)
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
    echo "Error: HYPRLAND_INSTANCE_SIGNATURE is empty. Is Hyprland running?" >> "$LOG_FILE"
    exit 1
fi
echo "Found HYPRLAND_INSTANCE_SIGNATURE: $HYPRLAND_INSTANCE_SIGNATURE" >> "$LOG_FILE"

# 4. 'su'를 사용하여 실제 hyprctl 명령을 로그인된 사용자의 권한으로 실행합니다.
# 이렇게 해야 사용자의 Hyprland 세션에 접근할 수 있습니다.
# 모든 환경 변수를 전달하여 실행 컨텍스트를 유지합니다.
run_as_user() {
    sudo -u "$HYPR_USER" DISPLAY=:0 HYPRLAND_INSTANCE_SIGNATURE="$HYPRLAND_INSTANCE_SIGNATURE" "$@"
}

# 5. 터치패드 장치 이름을 설정합니다. (사용자 환경에 맞게 수정 필요)
TOUCHPAD_DEVICE="asue120d:00-04f3:31fb-touchpad"

echo "Touchpad device to control: $TOUCHPAD_DEVICE" >> "$LOG_FILE"

case "$1" in
  add)
    echo "Action: add. Disabling touchpad." >> "$LOG_FILE"
    run_as_user hyprctl keyword "device[$TOUCHPAD_DEVICE]:enabled" false
    ;;
  remove)
    echo "Action: remove. Enabling touchpad." >> "$LOG_FILE"
    run_as_user hyprctl keyword "device[$TOUCHPAD_DEVICE]:enabled" true
    ;;
esac

echo "Script finished successfully." >> "$LOG_FILE"
echo "" >> "$LOG_FILE"

exit 0

 

이때 터치패드 장치 이름은 hyprctl devices 명령으로 확인할 수 있다.

 

Mouse at 556d6d2388f0:
                asue120d:00-04f3:31fb-touchpad
                        default speed: 0.00000
                        scroll factor: -1.00

 

노란 형광펜 부분이 touchpad 장치 이름이다.

 

그리고 나서 touch_toggle.sh 파일을 실행 가능하게 만들어줘야 한다. touch_toggle.sh 파일이 있는 디렉토리에서 다음을 실행한다.

 

chmod +x touch_toggle.sh

 

그 다음 /etc/udev/rules.d/ 로 이동하여 99-mouse-hotplug.rules 라는 파일을 만든다. 여기서는 관리자 권한으로 파일을 만들고 수정해야 한다. sudo nvim 99-mouse-hotplug.rules 를 실행하고 관리자 암호를 입력하면 됨. 그리고 다음과 같은 내용을 채워 넣는다.

 

ACTION=="add|remove", SUBSYSTEM=="hid", ENV{HID_NAME}=="마우스이름", RUN+="/디렉토리/touch_toggle.sh %E{ACTION}"

 

당연히 "디렉토리" 부분에는 touch_togle.sh 가 있는 디렉토리를 적어줘야 한다. 또한 "마우스이름" 부분에는 자신의 마우스이름을 넣어줘야 한다. ex) "Logi POP Mouse" 
마우스 이름은 bluetoothctl info 를 통해서 확인할 수 있다. 

 

Device DD:52:C4:44:F4:C4 (random)
        Name: Logi POP Mouse
        Alias: Logi POP Mouse
        Appearance: 0x03c2 (962)
        Icon: input-mouse
        Paired: yes
        Bonded: yes
        Trusted: yes
        Blocked: no
        Connected: yes
        WakeAllowed: yes
        LegacyPairing: no
        CablePairing: no
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        UUID: Battery Service           (0000180f-0000-1000-8000-00805f9b34fb)
        UUID: Human Interface Device    (00001812-0000-1000-8000-00805f9b34fb)
        UUID: Logitech International SA (0000fd72-0000-1000-8000-00805f9b34fb)
        UUID: Vendor specific           (00010000-0000-1000-8000-011f2000046d)
        Modalias: usb:v046DpB030d0008
        Battery Percentage: 0x4b (75)

노란 형광펜 부분이 마우스 이름이다.
혹시 bluetoothctl 이란 명령어가 없다고 나온다면 bluez 와 bluez-utils 를 설치해야 한다.

이제 터미널에서 sudo udevadm control --reload-rules 를 실행하면 마우스가 연결됨에 따라 자동으로 touchpad 가 on/off 되는 것을 확인할 수 있다.

반응형


Comments