Xorgの設定なんもわからん

15 Feb 2023

ので、Wacomペンタブの設定とともに調べてみたところの雑感。

環境:Arch Linux + i3wm

追記:
(17 Feb)Matchの解説が結局なんだったの感があったので超最短設定も載せた。
(19 Feb)存在しない消しゴムをオフにする設定もいれた。


Back

わけあってHuion 420からOne by Wacomに買い替えたのでペンタブ新調恒例行事のxsetwacom会をする。

……けど、もうずっとxsetwacomコマンドを.profileとかi3wmの設定ファイルとかに書いて自動起動させてばかりなので、いい加減本当の設定ファイル(xorg.conf)を書けるようになるか〜と立ち上がった。
Xorgの設定ファイルについては書式自体は分かってるけど値そのものに何を入れたらいいのか分からない、入れてもうまく適用されないという印象がずっとあったし、どこか一個でも間違うと途端にX自体が起動しなくなる初見殺しっぷりなので学ぶハードルが地味に高くてなんやかんやずっと忌避してきた。
今ならXが死んだ状態からどうにか復帰するくらいのコマンドぢからはあるので、値の取り方などのふんわりしすぎているところを調べてみた。

参考:
Wacomタブレット - ArchWiki

情報収集に使ったコマンド

One by Wacom Smallにwacomドライバを使わせて検知幅と筆圧をHuion 420に似せる最短設定

/usr/share/X11/xorg.conf.d/70-wacom.conf

Section "InputClass"
Identifier "One by Wacom"
MatchProduct "Wacom One by Wacom S Pen"
MatchDevicePath "/dev/input/event*"
Driver "wacom"
Option "Area" "0,0,15168,8532"
Option "PressureCurve" "0,20,80,100"
EndSection

追記:もっとこっちのほうが単純かもしれない

Section "InputClass"
Identifier "One by Wacom"
MatchUSBID "056a:037a"
Driver "wacom"
Option "Area" "0,0,15168,8532"
Option "PressureCurve" "0,20,80,100"
EndSection

↑の解説

基本的に白字のところは値がどうなっていても合っていなければ無視されたり別のものが当てられるので大丈夫だけど、色のついた字は誤字ったりすると「そんな項目ございませんが……?」とXが起動しなくなってしまう。
ファイル名については「数字2桁-名前.conf」であるのが通例になってるらしく、数字が大きいほど最後に読み込まれて上書きされにくくなる。

Identifier "One by Wacom"

いわゆるプロファイル名みたいなものなので好きな名前にしていい。もしかしたらxorgのログなどに「こいつを適用しました!!」というようなログが出て、そこに使われるかもしれない。

MatchProduct "Wacom One by Wacom S Pen" と MatchDevicePath "/dev/input/event*"

Matchなんちゃらには種類があり、「どのデバイスにこのセクションの設定を適用するのか」を指示することができる。
体感的にはHTMLとCSSのセレクタみたいなものに似てる。HTMLタグに様々なクラスやIDがついていて(こっちがデバイス)、CSSがそのうちのどれかを広く指定したりピンポイントで指定したりしてから見た目のオプションをつける(こっちがxorgの設定)、といった感じに。
なのでデフォルトの設定ファイルなどでは型式とかメーカー名などで自由に名前が入力されているように見えるのだが、一応きちんと合致するような入力内容になっている。「Wacom Pen Tablet」とか適当にそれっぽいことを入れても反応はしない。
例として自環境のトラックパッドと比較↓


$ cat /proc/bus/input/devices

$ lsusb

PeripadのProduct名はたぶん何も入ってなかったからUSBIDに味付けして出しただけ感。

製品名以外にもMatchUSBID(lsusbで出るコロン含みの8桁)やMatchDevicePath(/dev/input/eventの何番か)など指定方法がたくさんあって、Xorgのmanページで一覧が見れる。
意外にもMatch系はワイルドカードで広く指定したりOR指定("Wacom|WACOM" など)したりしてもうまくヒットすることがある。入力デバイスはキーボードなども含まれるのでそこらへんは影響が及ばないようにしよう。

Input device configuration - Fedora Project Wikiによれば、ワコムのタブレット以外なら「pen」とか「stylus」だけで指定できるらしいが、ワコム製品は「Wacom One by Wacom S Pen」などとフルネームで入れてやらないといけないらしい。
↑のcatした画像の Name= 欄にその名称がそっくりついているので、MatchProductにはこれを引っ張ってくればいいのかもしれない。
ちなみにMatchProductという名前にはなってるけど、lsusbで出てくるProductID(コロン区切りの下4桁)のことではない。

追記部分の話:
「lsusb で出たIDをそのまま入力する」が一番設定方法としてはシンプルかなと思ったのでMatchUSBIDの例も入れた。
再起動でこの値が変わることはないんだけども、マシンやディストリを変えた後でも全く同じ 056a:037a が振られるかは分からないので、そういう環境が激変した時でもファイル移すだけで再設定をパパっと終わらせたい!って場合は控えたほうがいいかもしれない。

Driver "wacom"

たぶんこれで使用したいドライバを指定する。未だにインストール済みのドライバ名の調べ方がわかってないけど、デフォルトで出来上がっていた設定ファイルにはwacomと書かれていたのだからwacomでいいんだと思う。


試しに wacom ではなく libinput にしてみたらXorgのログでそう読み込んだと言っていたしxsetwacomでも検出されなくなった。

Option "プロパティ名" "値"

ここからがペンタブの設定。
設定できるプロパティは $ xsetwacom list parameters [xsetwacom list devices で出た短いID]で一覧表示ができる。
プロパティの設定中の値(書式)を見たいときは$ xsetwacom get [ID] [プロパティ名]で見れる。
今回はHuion 420と同じ検知幅を使わせたいのでAreaで絞ったり、やわらかめのペンを再現するためにPressureCurveを設定し直したりした。
ひっくり返して使いたいときは Option "Rotate" "half" を使うけど今回は置き場的にそのままでOKだったので使わない。

設定が定まっておらず一時的に試したい時(筆圧曲線とか)はコマンドラインで
$ xsetwacom set [ID] PressureCurve 0 0 100 100 で適用できる。xsetwacomではスペース区切りで値を入れるが、Xorgの設定ではカンマ区切りなところに注意。
この設定はペンタブを抜き差ししたり再起動したりするとリセットされる。

Azel先生の解説もお絵描き用途に絞って書いていて分かりやすいのでおすすめ。

雑記:「わけあって」のこと

ひとくちに言えば「Huion 420とWindowsの相性が悪すぎたから」になる。 詳細はこちら(なぜか下書きにおろされていたので再公開)。
Linuxで縦横無尽に好き勝手やってるように見えるかもしれないけれど、実のところ製本とかモーション系のものに興味があっても Windowsにしかソフトウェアがない→Windows起動する→ペンタブの調子悪すぎてやる気なくなる… となっていたので、すっきり買い換えてどっちの環境でもきちんと動けるようにしようということになった。

どうにもHuionには「Windows Inkとして使わせない」という選択ができず(ワコムにはその設定がある)、Windows自体がタブレットとして動こうとしたりデスクトップとして動こうとしたりと反復しまくっているのが不自由さの原因のように思う。
「カーソルをペンタブで操作してトラックパッドのボタンでクリックする」というやつがやりたいのにずっとできなかった。

過去記事に2代目だったHuion 420のレビューがあって、当時は小さいし滑るし沈むといった安かろうな言い草だったみたいだけど、今の作業効率は小さいが故にビュンビュン動くカーソルとよく滑るペン先と筆圧の分かりやすい感触があってこそだったと思う。
Osu!をやる人が購入しがちということで設定ドキュメントも意外と見つかったし、wacomドライバを当てればそれなりに設定もできたから、Linux使いとして見れば420は破格の値段でありながら他と何ら変わりないはたらきを見せてくれる満点のペンタブレットだった。

だから大して壊れてもないのにこんなことで買い換えるのは不服なんだよォ〜ッ!!!

個人的に変化の多かった時にありえん手頃さで味方についてくれた420へ、4年半の共闘にお疲れ様でございました。
今度はそのありえん小ささを引き合いにして車中原稿にでも付き合ってもらおうかな。

追記:存在しない消しゴムをオフにする

ペンにテールスイッチがついていないのに xsetwacom list devices をするとstylusとeraserが出てきてまぎらわしいし、ないと思うけど設定が混雑されそうなので切りたい。(Bambooの名残りかな…?)
wacomドライバには使用しない系のオプションがないので、Xorgについている Ignore オプションを使う。
ペン先とテールスイッチを区別するのに MatchUSBID だとペン先もろとも指定してしまうので、ここでは MatchProduct でフルネーム指定する。

Section "InputClass"
Identifier "One by Wacom Eraser Cutoff"
MatchProduct "Wacom One by Wacom S Pen eraser"
MatchDevicePath "/dev/input/event*"
Option "Ignore" "True"
EndSection

こうするとxinputとxsetwacomコマンドでeraserが検出されなくなる。スッキリ!