Create TOC

레이블이 udev인 게시물을 표시합니다. 모든 게시물 표시
레이블이 udev인 게시물을 표시합니다. 모든 게시물 표시

2025년 12월 14일

udev+systemd 로 usb 마운트 자동 설정

목차

    2021년 5월 31일

    Debian/key scancode 확인하기

    udev의 hwdb를 이용해 키를 변경하려면 key scancode를 확인해야 한다. evtest를 실행하고 입력 장치를 고른 후 키를 누르면 key scancode를 확인할 수 있다.

    $ evtest
    No device specified, trying to scan all of /dev/input/event*
    Not running as root, no devices may be available.
    Available devices:
    /dev/input/event0:      AT Translated Set 2 keyboard
    ...
    /dev/input/event17:     Apple Wireless Trackpad
    /dev/input/event18:     Logitech K760 Keyboard
    ..
    Select the device event number [0-20]: 18
    ...
    Event: time 1622111951.465432, -------------- SYN_REPORT ------------
    Event: time 1622111957.763084, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
    Event: time 1622111957.763084, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1
    Event: time 1622111957.763084, -------------- SYN_REPORT ------------
    Event: time 1622111957.967015, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70006
    Event: time 1622111957.967015, type 1 (EV_KEY), code 46 (KEY_C), value 1
    Event: time 1622111957.967015, -------------- SYN_REPORT ------------
    

    value 뒤의 값이 key scancode다.

    2021년 5월 27일

    Debian/Logitech K760 설정

    F1 ~ F12는 할당된 특수키 (화면 밝기 조절, 음량 조절 등)가 기본 값이고 펑션키(F1~F12)는 FN 키와 같이 눌러야 동작한다. 이것을 펑션키를 기본으로 하도록 설정한다.

    k760_conf 설치

    github에서 소스를 받아서 k760_conf을 설치한다.

    $ git clone https://github.com/neoesque/k760-linux-fn-conf
    $ cd k760-linux-fn-conf
    $ ./build.sh
    $ chmod +x k760_conf
    $ sudo cp k760_conf /usr/local/bin/
    

    수동으로 설정 변경

    아래와 같은 스크립트를 만들어 root 권한으로 실행하면 펑션키가 기본으로 동작하게 된다. 단, 장치를 다시 연결하면 설정이 초기화 되기 때문에 매번 다시 실행해줘야 한다.

    #!/bin/bash
    
    found=0
    hidraw_name=
    for x in /sys/class/hidraw/hidraw*; do
            for y in $x/device/input/input*; do
                    found=$(cat $y/name | grep "Logitech K760" | wc --lines)
                    if [ $found -gt 0 ]; then
                            break;
                    fi;
            done;
            if [ $found -gt 0 ]; then
                    hidraw_name=$(echo $x | sed -e 's/\/sys\/class\/hidraw\//\/dev\//')
                    break;
            fi;
    done;
    
    if [ "$hidraw_name" != "" ]; then
            echo "/usr/local/bin/k760_conf -d $hidraw_name -f off"
            /usr/local/bin/k760_conf -d $hidraw_name -f off
    fi;

    장치 연결시 자동으로 설정

    udev rule을 이용해서 K760이 연결되면 자동으로 k760_conf를 실행하게 만든다.

    /etc/bluetooth/input.conf에서 UserspaceHID 가 true/false 에 따라서 설정 방법이 조금 달라진다

    UserspaceHID==true

    k760_udev_userland.sh

    아래와 같은 내용으로 /usr/local/bin/k760_udev_userland.sh 파일을 만든다.

    #!/bin/bash
    
    LOGFILE=/tmp/logfile_k760sh.log
    echo "RUN: at `date` by `whoami` act=$ACTION param=$1 DEVPATH=$DEVPATH DEVNAME=$DEVNAME" >> ${LOGFILE}
    
    if [ "$ACTION" == "add" ];
    then
        for inp in /sys/class/hidraw/hidraw$1/device/input/*; do
            model_name=`cat $inp/name`
            if [ "$model_name" == "Logitech K760 Keyboard" ]; then
                echo "CONF: /usr/local/bin/k760_conf -d /dev/hidraw$1 -f off" >> ${LOGFILE}
                /usr/local/bin/k760_conf -d /dev/hidraw$1 -f off
                break
            fi
        done
    fi

    실행 속성을 부여한다.

    $ sudo chmod +x /usr/local/bin/k760_udev_userland.sh
    

    udev rule 작성

    아래와 같은 내용의 /etc/udev/rules.d/99-k760.rules 파일을 만든다.

    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", RUN+="/usr/local/bin/k760_udev_userland.sh %n"

    udev rule을 다시 읽는다.

    $ sudo udevadm control --reload-rules
    

    K760을 다시 연결한다.

    UserspaceHID=false

    k760_udev.sh

    아래와 같은 내용으로 /usr/local/bin/k760_udev.sh 파일을 만든다.

    #!/bin/bash
    
    LOGFILE=/tmp/logfile_k760sh.log
    echo "RUN: at `date` by `whoami` act=$ACTION param=$1 DEVPATH=$DEVPATH DEVNAME=$DEVNAME" >> ${LOGFILE}
    
    if [ "$ACTION" == "add" ];
    then
        echo "CONF: /usr/local/bin/k760_conf -d $DEVNAME -f off" >> ${LOGFILE}
        /usr/local/bin/k760_conf -d $DEVNAME -f off
    fi

    실행 속성을 부여한다.

    $ sudo chmod +x /usr/local/bin/k760_udev.sh
    

    udev rule 작성

    아래와 같은 내용의 /etc/udev/rules.d/99-k760.rules 파일을 만든다.

    KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idProduct}=="0029", ATTRS{idVendor}=="8087", RUN+="/usr/local/bin/k760_udev.sh %p"

    udev rule을 다시 읽는다.

    $ sudo udevadm control --reload-rules
    

    K760을 다시 연결한다.

    Fn+F4, Fn+F6, Fn+F7 키 보정

    위 작업을 끝낸 후 Fn+F4, Fn+F6, Fn+F7 키를 눌러보면 제대로 동작하지 않는다(Fn+F5는 XF86Home 키로 동작한다). Fn+F4, Fn+F6, Fn+F7의 scancode를 적당한 keycode로 바꿔줘야 한다.

    그리고 [alt][command][space][command][alt] 배열을 PC계열 키보드처럼 [win][alt][space][alt][menu] 로 바꿔준다.

    udev hwdbhttps://wiki.archlinux.org/title/Map_scancodes_to_keycodes를 이용하기 위해 아래와 같은 내용으로 /etc/udev/hwdb.d/99-k760.hwdb 파일을 만든다.

    # Logitech K760 map:
    # Fn + F4 -> scale
    # Fn + F6 -> brightnessdown
    # Fn + F7 -> birghtnessup
    # LWin -> LAlt
    # LAlt -> LWin
    # RWin -> RAlt
    # RAlt -> Menu
    evdev:input:b0005v046DpB316*
      KEYBOARD_KEY_700e0=scale
      KEYBOARD_KEY_70047=brightnessdown
      KEYBOARD_KEY_70048=brightnessup
      KEYBOARD_KEY_700e3=leftalt
      KEYBOARD_KEY_700e2=leftmeta
      KEYBOARD_KEY_700e7=rightalt
      KEYBOARD_KEY_700e6=compose

    파일이 만들어졌으면 hwdb를 갱신한다.

    $ sudo systemd-hwdb update
    $ sudo udevadm trigger
    

    적용 후 잠시 기다리면 Fn-F4, Fn-F7, Fn-F8이 원하는 키로 동작한다.