Create TOC

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

2021년 5월 19일

Debian/Cloudflare Warp VPN 설정

Debian Linux에서 Cloudflare Warp VPN을 사용하는 방법을 기술한다.

설치

아래 패키지를 설치한다.

$ sudo apt install resolvconf wireguard-tools
https://github.com/ViRb3/wgcf에서 wgcf 을 받는다.

VPN 설정

아래 명령을 입력해서 wgcf-profile.conf 파일을 만든다.

$ wgcf register
$ wgcf generate

만들어진 wgcf-profile.conf 파일을 /etc/wireguard에 복사한다.

$ sudo cp wgcf-profile.conf /etc/wireguard

사용 방법

VPN 사용

$ sudo wg-quick up wgcf-profile

curl을 이용해서 연결이 잘 되었는지 확인할 수 있다.

$ curl --silent https://www.cloudflare.com/cdn-cgi/trace | grep warp=
warp=on

VPN 중지

$ sudo wg-quick down wgcf-profile