なんか書いていこうぜー.com

Let's write something good

xf86-input-synaptic から xf86-input-libinput に乗り換えた

2020-07-04
  • Share on Facebook
  • Tweet
  • Add to Pocket

https://wiki.archlinux.org/index.php/Touchpad_Synaptics をみると、メンテナンスモードに移行したようなので、synaptics から libinput に乗り換えてみた。

xf86-input-synaptics の削除する

/etc/X11/xorg.conf.d/70-synaptics.conf と、パッケージを削除する。

$ yay -Rs xf86-input-synaptics

xf86-input-libinput を導入する

パッケージをインストールし、/usr/share/X11/xorg.conf.d/40-libinput.conf/etc/X11/xorg.conf.d/40-libinput.conf へコピーしてこれを編集する。(シンボリックリンク作成でいいと思う)

$ yay xf86-input-libinput

ArchWiki: libinput xinput を使う を参考にデバイスを調べる。 今回の対象は id=13 のタッチパッドを調整する。

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=13   [slave  pointer  (2)]
⎜   ↳ TPPS/2 Elan TrackPoint                    id=15   [slave  pointer  (2)]

ArchWiki: libinput Xorg 設定ファイルを使う にあるように、先程コピーしたファイルを編集する。

設定内容は ArchWiki: libinput 一般的なオプション をもとにして設定する。

タップでクリック、2本指クリックで右クリック、ナチュラルスクロールを有効にしている。

$ sudo vim /etc/X11/xorg.conf.d/40-libinput.conf
Section "InputClass"
        Identifier "SynPS/2 Synaptics TouchPad"
        Driver "libinput"
        MatchIsTouchpad "on"
        Option "Tapping" "on"
        Option "ClickMethod" "clickfinger"
        Option "NaturalScrolling" "true"
EndSection

タッチパッドの操作感度の調整

ArchWiki: マウスのアクセラレーション 速度を変更する を参考に調整する。

以下のコマンドで調整しつつ、ポインタの移動速度をみて設定する数値を変更する。

$ xinput --set-props 13 'libinput Accel Speed' 0.8

好みの感度になったら、/etc/X11/xorg.conf.d/40-libinput.conf に反映する

$ sudo vim /etc/X11/xorg.conf.d/40-libinput.conf
Section "InputClass"
        Identifier "SynPS/2 Synaptics TouchPad"
        Driver "libinput"
        MatchIsTouchpad "on"
        Option "Tapping" "on"
        Option "ClickMethod" "clickfinger"
        Option "NaturalScrolling" "true"
        Option "AccelSpeed" "0.8"
EndSection

まとめ

xf86-input-synaptics とその設定を削除して、xf86-input-libinput を導入し、設定ファイルを作成した。 感度はコマンドで設定した後、設定ファイルに反映した。 実は他の設定もコマンドで設定して確認した後に反映することもできるが、ArchWiki の一般的な設定内容と目的が一致していたので、そちらについては直接設定ファイルに記載した。

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートでつまずいた

2020-03-21
  • Share on Facebook
  • Tweet
  • Add to Pocket

gatsby-plugin-sharp と gatsby-plugin-manifest のアップデートの際にエラーが発生したが、なんとか解消できたので emoji-memo として残しておく。

発生した問題

gatsby-plugin-sharp のアップデートPR( Bump gatsby-plugin-manifest from 2.2.47 to 2.3.1 ) と、gatsby-plugin-manifest のアップデート PR (Bump gatsby-plugin-sharp from 2.4.11 to 2.5.1) で以下のようなエラーが出た。

error "gatsby-plugin-manifest" threw an error while running the onPostBootstrap lifecycle:

Input file contains unsupported image format


  Error: Input file contains unsupported image format

not finished onPostBootstrap - 0.014s

エラーの issue を追いかけた

エラーメッセージでググると、https://github.com/gatsbyjs/gatsby/issues/22303 にあたった。その中のコメントで、libvips/libvips#1539 のリンクに言及されていたのでそちらを確認した。

その中で、lovell/sharp#2062 のリンクに言及しており、コメント で breaking change があったことがわかる。v0.24.0 以上の sharp が必要とな?

taniarascia/taniarascia.com#103 からこの issue が参照されていて、その中のコメント に解決策が提示されていた。

この解決策のコメントの中にあった、resolutions の設定を package.json に追記したところ、エラーが解消され、ビルドがうまくいくようになった。emoji-tada

package.json の resolutions について

pacakge.json の resolutions を使ったことがなかったのでぐぐってみたら、 https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ がわかりやすかった。

依存パッケージのバージョンを横から指定できるのか。依存パッケージの一部に脆弱性が見つかったりした場合に、これを使って強引にパッチのあたったバージョンにアップデートさせる、というような使い方できるっぽい。これは勉強になった emoji-memo

結論

今回は package.json の resolutions に sharpt のバージョンを "^0.24.1" として指定することでエラーを回避した。 resolutions については、https://classic.yarnpkg.com/ja/docs/selective-version-resolutions/ を参照のこと。

Arch Linux で rootless docker を設定した

2020-03-11
  • Share on Facebook
  • Tweet
  • Add to Pocket

何点か躓いたので emoji-memo しておく。

https://docs.docker.com/engine/security/rootless/ の手順を参考に rootless docker を設定していった。

前提

https://docs.docker.com/engine/security/rootless/#arch-linux#prerequisites を確認した。

newuidmapnewgidmap コマンドはインストールされていた。 /etc/subuid/etc/subgid はなかったので、下記のコマンドで作成した。中身は空のまま。

$ sudo touch /etc/subgid /etc/subuid

Arch Linux 特有の準備作業

https://docs.docker.com/engine/security/rootless/#arch-linux を参照。

私の環境では、/etc/sysctl.conf はなく /etc/sysctl.d/ があったため、/etc/sysctl.d/100-rootless-docker.conf を作成して、kernel.unprivileged_userns_clone=1 を記述し、sudo sysctl --system を実行する。

$ sudo vim /etc/sysctl.d/100-rootless-docker.conf
kernel.unprivileged_userns_clone=1

$ sudo sysctl --system

インストール (下ごしらえ)

https://docs.docker.com/engine/security/rootless/#arch-linux#install を参照。

curl と sh でインストールすることになるのだが、/etc/subgid/etc/subuid が空の場合、これらにユーザの情報を書き込むように警告が出るので、その値を書き込む。 /etc/subuid, /etc/subuid どちらも空ならば、それぞれについて警告が出るので、両方に書き込む。

$ curl -fsSL https://get.docker.com/rootless | sh

Could not find records for the current user muryoimpl from /etc/subuid . Please make sure valid subuid range is set there.
For example:
echo "muryoimpl:100000:65536" >> /etc/subuid

書き込んで、再度実行する。システムに入った docker が起動していると下記の警告が出る。docker.service 停止して環境変数を設定した。

$ curl -fsSL https://get.docker.com/rootless | sh
Aborting because rootful Docker is running and accessible. Set FORCE_ROOTLESS_INSTALL=1 to ignore.

$ sudo systemctl stop docker.service
$ export FORCE_ROOTLESS_INSTALL=1

インストール

下ごしらえが終わったら、curl を使ってインストールする。 PATH と DOCKER_HOST の設定が出力されるので、私は ~/.zshrc に書き込んだ。

$ curl -fsSL https://get.docker.com/rootless | sh

# Installing stable version 19.03.7
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 60.7M  100 60.7M    0     0  22.8M      0  0:00:02  0:00:02 --:--:-- 22.7M
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.8M  100 17.8M    0     0  14.8M      0  0:00:01  0:00:01 --:--:-- 14.8M
# starting systemd service
# starting systemd service
● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/home/muryoimpl/.config/systemd/user/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-03-11 23:08:04 JST; 36ms ago
       Docs: https://docs.docker.com
   Main PID: 12660 (rootlesskit)
     CGroup: /user.slice/user-1000.slice/user@1000.service/docker.service
             ├─12660 rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
             ├─12669 /proc/self/exe --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
             └─12676 vpnkit --ethernet /tmp/rootlesskit924008508/vpnkit-ethernet.sock --mtu 1500 --host-ip 0.0.0.0

Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + which slirp4netns
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + which vpnkit
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + net=vpnkit
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + mtu=1500
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + '[' -z ']'
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + _DOCKERD_ROOTLESS_CHILD=1
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + export _DOCKERD_ROOTLESS_CHILD
Mar 11 23:08:04 muryoimpl-T495 dockerd-rootless.sh[12660]: + exec rootlesskit --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run /home/muryoimpl/bin/dockerd-rootless.sh --experimental --storage-driver=vfs
Client: Docker Engine - Community
 Version:           19.03.7
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        7141c199a2
 Built:             Wed Mar  4 01:19:42 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          19.03.7
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       7141c199a2
  Built:            Wed Mar  4 01:19:50 2020
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
# Docker binaries are installed in /home/muryoimpl/bin
# WARN: dockerd is not in your current PATH or pointing to /home/muryoimpl/bin/dockerd
# Make sure the following environment variables are set (or add them to ~/.bashrc):\n
export PATH=/home/muryoimpl/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

#
# To control docker service run:
# systemctl --user (start|stop|restart) docker

docker daemon の自動起動を設定する

インストール後、~/.config/systemd/user/docker.service が配置されるので、systemctl --user enable docker.service すると自動起動すると思いきやされないので、下記を参考に unit ファイルを編集した。

https://qiita.com/yasthon/items/26f943bd5f1b8fab87e0#rootless-docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86

https://docs.docker.com/engine/security/rootless/#arch-linux#daemon を参考に、loginctl コマンドも実行しておいた。

$ vim ~/.config/systemd/user/docker.service
[Install]
-WantedBy=multi-user.target
+WantedBy=default.target
$ systemctl --user enable docker.service
$ sudo loginctl enable-linger $(whoami)

遭遇した問題ややり直す方法について

  • curl 時に出る警告 echo "muryoimpl:100000:65536" のとおりに設定しないと、docker.service の起動に失敗したので、素直に従っておくことにした
  • 最初から手順を確認したい、再インストールしたい場合は、~/bin を削除し、export した PATH, DOCKER_HOST をコメントアウト、/etc/subgid, /etc/subuid の値を空にして、curl すると再現できた
  • 元のシステムワイドな docker で動かしていた rails 環境を動かした際、、bootsnap の起動や volume のマウントあたりで権限エラーが発生した。docker image を削除して再度作成することで解消した。Rails.root/tmp の中の cache 等にも旧権限が残っていたりするので削除するなり、owner をユーザにしておくなりしておくとエラーを解消できた

BuriKaigi2020 に参加して発表してきた

2020-02-01
  • Share on Facebook
  • Tweet
  • Add to Pocket

BuriKaigi2020 が 2/1 に開催されたので、急遽発表者として参加してきた。

経緯

1/29 の 22 時過ぎくらいに、近所の中華屋で遅い晩ごはんを食べているときに、以下の tweet を見て衝撃を受ける。

なぜかこのときに、穴があくのはヤダなぁと思ったので、オリャーemoji-dashの精神でノープランで mugi さんに DM した。

22:26 あたりにお気持ち表明して 23:07 にはサイトに反映されているというこのスピード感すごい…

この間、実は会社のブログに書かれている GitHub issue には気がついてなかったが、やりとりの後に気がついたので発表者欄に反映された URL つけて報告しておいた。 ブログみてハードルあがったwemoji-sweat_smile

発表について

昨年 12 月の LT で発表したテスティングフレームワークに興味があって作ってみたいな、という話が下敷きになっている。

年末に『テスト駆動開発』の第Ⅱ部を Ruby 実装していたものと、minitest のコードを読んでいたこともあって、「minitest で学ぶメタプログラミング」ということで話ししようと晩ごはん食いながらのやりとりで決めたのであった。

1/29 中にアウトライン作成して、1/30, 1/31 でなんとかスライド作ったものの、当日も微調整して、発表者ノートがうまく開かず時間が確認できない中で時間超過やショートするかと思いきや、うまい具合に収まったので助かった… emoji-sweat_drops

発表後

当日発表が後半も後半で発表終わるまでガチガチに緊張していたので、終わってやって気持ちが楽になった。 他の発表者の皆さんと日々ぶちあたった問題やその解決案、説明方法等について話しができたので非常によい時間を過ごすことができた。

本編(ぶりしゃぶが出るほうが本編)で、すごいの出てきたので記録として残してしておく。

いやぁ、楽しいイベントだった emoji-smile

i3-wm と polybar に乗り換えた

2020-01-25
  • Share on Facebook
  • Tweet
  • Add to Pocket

2019年末から2020年年始の休みの間に、awesome-wm から i3-wm + polybar + dunst + picom に乗り換えた。

実際に入ったのは、i3-gaps らしい。

$ sudo pacman -S i3

なぜ乗り換えたの?

awesomeからi3に同僚が乗り換えたというので、年末に試すかーと思っていたが、そのまま乗り換えた。

気に入った点は以下のとおり。

  • ワークスペースが外部ディスプレイにまたがって設定されるのでディスプレイ間の移動が簡単
  • 一部 awesome とショートカットが似ている
  • もともとの設定がよくできているのであまりカスタマイズしなくても使える
  • 設定は設定ファイルに記述 or シェルを呼び出すだけなので設定書くのに覚えることはそんなに多くない

どう設定したの?

だいたいここに書いてある。

https://github.com/muryoimpl/dotconfig

設定 したことをかいつまんで

外部ディスプレイに接続されたときに、決まったワークスペースを割り当てるようにした

workspace 1 output eDP1
workspace 2 output HDMI2 HDMI1 eDP1
workspace 3 output HDMI2 HDMI1 eDP1
workspace 4 output DP2 HDMI1 eDP1

左から順に同名のディスプレイあれば設定されて、そうでなければ次、なければ eDP1 (ノートPC本体のディスプレイ) にすべて設定される。

ノートPC本体、ワイドディスプレイ、縦ディスプレイの順で配置しているので、左から 1, 2 & 3, 4 のワークスペースが設定されるようになっている。

scrot で screenshot 撮れるようにした

awesome で設定していたものとだいたい同じものを設定した。Win + PrtScr で全画面、Win + Shift + PrtScr で選択範囲を撮るようになっている。

bindsym $mod+Print exec --no-startup-id "scrot -e 'mv $f ~/screenshots/ 2>/dev/null'"
bindsym $mod+Shift+Print exec --no-startup-id "sleep 0.5 && scrot -s '%Y-%m-%d_%H%M%S_scrot.png' -e 'mv $f ~/screenshots/ 2>/dev/null'"

コンポジットマネージャと壁紙とPolybar

## コンポジットマネージャ(ちらつき防止のため導入)
exec_always --no-startup-id picom -b -d :0
## 壁紙 (ディスプレイごとにかえたかったので nitrogen 導入)
exec_always --no-startup-id nitrogen --restore
## polybar (i3-status でもよかったが、ディスプレイごとに表示をかえたかった)
exec_always --no-startup-id $HOME/.config/polybar/launch.sh

Polybar の設定

i3-style で生成した色を使っている。

Polybar には接続しているディスプレイごとに表示するものを簡単にではあるが変えている。 ここ にあるように、縦ディスプレイに表示項目が多いと時刻が見えないのでかえている。

FontAwesome によるアイコンフォントの設定はフォント名の設定がちょっと変わっていたのでハマった。その他のアプリで表示されるフォント名と異なっているのはなぜ?

困っていることは?

外部ティスプレイを接続して arandr で設定したときに Polybar をリロードしないと Nitrogen の壁紙と bar の表示が乱れることがあるところが解決していないが、ショートカットでリロードできるのでなんとかなっている。