Create TOC

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이 원하는 키로 동작한다.