Fedora (GNOME3, Wayland)で設定したいところ一覧

#始めに

この文章ではFedora等のGNOME3, Wayland環境でよく設定変更したいところ(MouseやKeyboard等)についての方法を備忘録程度に書いたものです。

上に書いているように筆者はFedoraでの経験を書いていますがGNOME3, Waylandの環境の人だったら同じように設定できると思います。

# KeyboardのCtrl/CapsLockの入れ替え
`gnome-tweak-tool`をインストールすることでGUIから設定変更が可能です。

ちなみにターミナルから設定変更したい方は以下を参考にして下さい。

```:shell
# CapsLockをCtrlにする
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
# または
dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:nocaps']"

# CapsLockとCtrlを入れ替える
gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']"
# または
dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps']"
```

# yubikeyを使いたい

udevで間違えて認識しないようにruleを記述します。

```:/etc/udev/rules.d/70-u2f.rules
ACTION!="add|change", GOTO="u2f_end"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", TAG+="uaccess"
LABEL="u2f_end"
```

# Mouseのボタンを入れ替える (new)

udevのhwdbで変えるのが可能です。

## 対象のデバイスを見つける

`evtest`コマンドで対象のデバイスの情報、入れ替えたいボタンのcodeを確認します。

```
# sudo evtest 
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Sleep Button
(snip)
/dev/input/event16:	SlimBlade Pro
/dev/input/event2:	Power Button
(snip)
/dev/input/event8:	Video Bus
/dev/input/event9:	PC Speaker
Select the device event number [0-16]: 16
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x47d product 0x80d4 version 0x6701
Input device name: "SlimBlade Pro"
Supported events:
  Event type 0 (EV_SYN)
(snip)
Properties:
Testing ... (interrupt to exit)
Event: time 1717058659.959750, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1717058659.959750, type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
Event: time 1717058659.959750, -------------- SYN_REPORT ------------
Event: time 1717058660.063444, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1717058660.063444, type 1 (EV_KEY), code 275 (BTN_SIDE), value 0
Event: time 1717058660.063444, -------------- SYN_REPORT ------------
Event: time 1717058661.017535, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1717058661.017535, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
Event: time 1717058661.017535, -------------- SYN_REPORT ------------
```

必要な情報は以下の情報です
- 対象のデバイスのpath (ここでは`/dev/input/event16`)
- 入れ替えたいボタンのコード(ここでは`90003`と`90004`)

```
Event: time 1717058660.063444, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003
Event: time 1717058660.063444, type 1 (EV_KEY), code 275 (BTN_SIDE), value 0
Event: time 1717058660.063444, -------------- SYN_REPORT ------------
Event: time 1717058661.017535, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1717058661.017535, type 1 (EV_KEY), code 274 (BTN_MIDDLE), value 1
```

## hwdbファイルの作成、反映

それをベースに以下のファイル(`/etc/udev/hwdb.d/99-slimblade.hwdb`)を作成します

``` /etc/udev/hwdb.d/99-slimblade.hwdb
evdev:input:b*v047Dp80D4*
 KEYBOARD_KEY_90003=btn_side
 KEYBOARD_KEY_90004=btn_middle
```

以下のコマンドで読み込み、反映させます。
```
sudo udevadm hwdb --update
sudo udevadm trigger
```

入れ替わった場合は以下のように`udevadm info`でも反映されます。

```
# udevadm info /dev/input/event16
P: /devices/virtual/misc/uhid/0005:047D:80D4.0004/input/input16/event16
M: event16
R: 16
U: input
D: c 13:80
N: input/event16
L: 0
E: DEVPATH=/devices/virtual/misc/uhid/0005:047D:80D4.0004/input/input16/event16
E: DEVNAME=/dev/input/event16
E: MAJOR=13
E: MINOR=80
E: SUBSYSTEM=input
E: USEC_INITIALIZED=102451604
E: KEYBOARD_KEY_90003=btn_side
E: KEYBOARD_KEY_90004=btn_middle
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_BUS=bluetooth
E: NVME_HOST_IFACE=none
E: LIBINPUT_DEVICE_GROUP=5/47d/80d4:c8:8a:9a:6d:5b:2c
```

# Mouseのボタンの設定を入れ替える (deprecated)

Waylandの場合Mouseのボタンの設定変更はxinputで可能です。

## xinputを使って設定を変更する

基本は [arch linux - マウスのアクセラレーション](https://wiki.archlinux.jp/index.php/%E3%83%9E%E3%82%A6%E3%82%B9%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%83%A9%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3#xinput_.E3.82.92.E4.BD.BF.E3.81.86)や [xinputでマウスボタンのマッピングを変更する](http://ja.akionux.net/wiki/index.php/xinput%E3%81%A7%E3%83%9E%E3%82%A6%E3%82%B9%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%AE%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B)と同じなのですが、設定を永続的にする方法がなかなか難しかったりします。理想としてはユーザでログインするそのタイミングなので、以下の方法で可能です。

## ログイン時に設定を有効にする
以下の2つのファイルを作成することで、ユーザのログイン時に設定を変更させることが可能です。

```:/usr/libexec/libinput-mouse 
#!/bin/sh
#xinputを使って設定したいものを書く。
#ここではKensingtonのSlimbladeの上の2ボタンを通常から反転させる設定を追加 (右上が中ボタンになる)
xinput set-button-map 7 1 8 3 4 5 6 7 2 9 10
```

```:/etc/xdg/autostart/libinput-mouse.desktop
[Desktop Entry]
Type=Application
Name=xinput for mouse
Exec=/usr/libexec/libinput-mouse.sh
X-GNOME-Autostart-Phase=Desktop
X-GNOME-Autostart-Notify=false
X-GNOME-Autostart-enabled=true
OnlyShowIn=GNOME;
```

# 起動時にroot権限で何かスクリプトを動かす

systemdを使うことも可能ですが`/etc/rc.d/rc.local`に記述することでも可能です。起動後に監視する必要がない場合にはこっちの方が簡単かもしれません。

# タイトルバーの幅を狭くする

[GNOME 3 のタイトルバーを細くする](https://qiita.com/VienosNotes/items/412bb4375f9c75069bab)や[Reduce title bar height in gnome 3 / gtk+ 3](https://unix.stackexchange.com/questions/257163/reduce-title-bar-height-in-gnome-3-gtk-3)を参考に僕は以下のようにしています。

```:~/.config/gtk-3.0/gtk.css
/* shrink headerbars (don't forget semicolons after each property) */
headerbar {
    min-height: 0px;
    padding-left: 2px; /* same as childrens vertical margins for nicer proportions */
    padding-right: 2px;
    background-color: #2d2d2d;
}

headerbar entry,
headerbar spinbutton,
headerbar button,
headerbar separator {
    margin-top: 0px; /* same as headerbar side padding for nicer proportions */
    margin-bottom: 0px;
}

/* shrink ssd titlebars */
.default-decoration {
    min-height: 0; /* let the entry and button drive the titlebar size */
    padding: 0px;
    background-color: #2d2d2d;
}

.default-decoration .titlebutton {
    min-height: 0px; /* tweak these two props to reduce button size */
    min-width: 0px;
}

window.ssd headerbar.titlebar {
    padding-top: 3px;
    padding-bottom: 3px;
    min-height: 0;
}

window.ssd headerbar.titlebar button.titlebutton {
    padding-top: 3px;
    padding-bottom:3px;
    min-height: 0;
}
```