読者です 読者をやめる 読者になる 読者になる

dothikoのカクカクワールド2D REBOOT

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか色々。

ちゃんと使えたIntuos CTH-680 @ ubuntu 14.04

Intuos CTH-680を買ってみたわけですが…

購入の動機

何故買ったのかというと、別に今まで使ってたbambooに不満があったわけではないのですが、Linuxを使っていると最新のデバイスが対応していないという状況がよくあります。最近は多少マシになりましたが。

そうすると前のモデルが欲しくなりますが、売っていない。ボロボロになった中古しか無い。

そんな状況が起こりうるわけです。

そのため、ストック的に買っておいたほうがいいかな〜というのと、あと実家用のペンタブが初代Intuosでいい加減古く、比率も4:3で16:10のモニタで使うとちょっと小さくなります。そこで実家用を予備役に引退させ、bambooを実家用、新Intuosと言う名の次世代Bambooをメインに使用しようと考えました。

あとCTH-680はスイッチでタッチが切れるので、いままでのBambooのようにxsetwacomでソフト的に切る=ハードは反応して時折LEDが光って鬱陶しい、ということもなく、そこも気に入りました。

素の14.04でどうだったか、というあやふやな記憶

使っているubuntu 14.04.1 LTSでは、そのままではポインティングデバイスとしては認識するものの、xsetwacom --listで現れない…ような気がしました。今となってはあやふやです。 やっぱ使えないかーと思って、ubuntuが15.04 vividになるまで待とう…と思い、しまっておきました。

とにかく筆圧が反応しなかった気がするのですが、今思うと、もしかしてこれはgimpで設定するのを忘れた可能性もなくはない。しかし、とにかくその時の体験としては筆圧が使えなかったのです。

ですが、思い切ってubuntuのHWEで14.04(trusty)に、utopic(14.10)のカーネルを入れてみたところ…無事筆圧も反応動作するようになりました!!

sudo apt-get install linux-generic-lts-utopic

ボタンについて

どのボタンがxsetwacomでどのボタンに対応しているかも示しておきます。ちょっと見づらいかもですが、左上が3、左下が1、右上が9、右下が8です。

f:id:dothiko:20150427110725j:plain

これらのボタンは「Finger pad」、xsetwacomでいうところのIDでは、たとえばオイラの買った油彩用では「Wacom Intuos PT M Finger pad」というデバイスに属するモノになります。

IDはIntuosのモデルで多少名前が違うかもなので、xsetwacom --listで確認しましょう。

Wacom Intuos PT M Finger touch id: 10 type: TOUCH
Wacom Intuos PT M Finger pad id: 11 type: PAD
Wacom Intuos PT M Pen stylus id: 14 type: STYLUS
Wacom Intuos PT M Pen eraser id: 15 type: ERASER

うちではこんな感じですが、ちなみにこの数字のIDの方は挿す度に変化していることもある(状況による)ので、設定ファイルでは「Wacom Intuos PT M Pen stylus」といった固定名IDのほうが絶対にオススメです。 まぁ、複数の同じペンタブを挿したらどうするのか…という疑問もありますが、そんなことする奴はいない(多分…(;´Д`))

これらのボタンには、

xsetwacom --set "Wacom Intuos PT M Finger pad" Button 3 Key Esc

などとすると、キーボードのキーを割り当てることができます。この例では左上ボタンにESCキーです。

趣味の自動設定

昔はxfceで「ペンタブをプラグしたら任意のスクリプトを走らせる」という設定があったと思ってたんですが、どうも今は無いっぽいですね?よくわからないですけど…

オイラはudevで自前のシステムを組んで、ペンタブをプラグしたら設定を走らせ、デュアルモニタのうちメインモニタ側にマップするようにしていたため、まったくわかりません…すみません。 それも、pythonを使い画面比率を自動認識してペンタブの比率をその場で計算して自動適応させるというシステムになっておりますw

以下の説明でそのpythonの仕組みを取り入れると無駄に煩雑になるため、シェルスクリプトだけで再現してみました。

まぁ、別にペンタブを起動前から挿しっぱなしで全く問題ないため、いちいち自動反応する必要は全くないのですが、なにぶん凝り性なもので…

一応、こんなことをしている人もいる、ということで、恥ずかしながら書いておきます。 まず、/usr/local/lib/pentabというディレクトリを作り、そこにcth680_starter.shとcth680_setting.shを書きました。まぁディレクトリはお好みですが、以下、そういう設定であります。

ともかく、このcth680_starter.shがudevから呼ばれるようにします。

そこで、udevでは/etc/udev/rules.d/に99-wacom.confを追加します。

ACTION!="add",GOTO="my_wacom_end"
SUBSYSTEM=="input",ENV{WACOM_TYPE}=="stylus",ENV{ID_MODEL_ID}=="0303",RUN+="/usr/local/lib/pentab/cth680_starter.sh"
LABEL="my_wacom_end"

ちなみに、これらのWACOM_TYPEなどの識別名は、ターミナルでudevadm monitor --propertyでudevモニタを起動し、待ち状態にして、実際にペンタブをさしてみることで得られます。油彩モデル以外のコミックとかでもちょっと違うモデルIDになってるかもなんで、このようにイジる場合は確認は必須です。

そして、OSを再起動せずに直後にプラグして使いたい場合は、このようにconfをrules.d/に入れた後、sudo udevadm control --reload-rulesして、変更をudevに知らせることが肝要です。

この99-wacom.confから呼ばれる/usr/local/lib/pentab/cth680_starter.shは、以下のようなものです。

#!/bin/sh
/usr/local/lib/pentab/cth680_setting.sh delay &
exit 0

cth680_starter.sh自体は何もペンタブ設定を行わず、二段目のスクリプトを数秒後に立ち上げるためだけのランチャーで、このcth680_starter.sh自体はすぐに終了します。

なんでこんな面倒くさいことをしているのか?というと、実はudevで起動させると、そのタイミングではwacomのペンタブデバイスは実際にはx input systemに認識されていないようなのですね。

それで、2秒ぐらい待ってから設定させたいのですが、そのまま単純に待つと当然ながらudevで処理が滞ってしまい、x input systemの設定が行われないという無意味な状況になるようです。ですので & 指定でバックグラウンドで実際の設定を行わせるトリガだけを行い、cth680_starter.shはそのまま終了してしまうという作戦です。

ここから実際に呼び出されるcth680_setting.shでは、delayオプションを見て、まぁ二秒も待てば十分だろうということで、sleep 2してから設定をはじめます。

そういうわけで、本体のcth680_setting.shはこちら。

このスクリプトではudevシステムから呼び出される以上、Xにアクセスするためにユーザーごとの環境変数XAUTHORITYが絶対に必要ですが、どのユーザーがプラグして使うのを知ればいいのか、どういうのがlinux的に正しいのか?分からないため、どうせ自分しか使わないシステムということもあり、決め打ちです(;´Д`)

#!/bin/sh

if [ "$1" = "delay" ];then
    sleep 2
fi

export DISPLAY=:0.0
export XAUTHORITY=/home/dothiko/.Xauthority

id_pad="Wacom Intuos PT M Finger pad"
id_stylus="Wacom Intuos PT M Pen stylus"
id_eraser="Wacom Intuos PT M Pen eraser"

# エリア初期値 幅 21600 高さ 13500
# 16:10時 基本的には不要
# 16:9時  21600 12150

# 16:9モニタ時。
# アスペクト比の切り替えは、コメントアウトで対応
# xsetwacom --set "$id_stylus" Area 0 0 21600 12150
# xsetwacom --set "$id_stylus" MapToOutput 1920x1080+0+0
# xsetwacom --set "$id_eraser" Area 0 0 21600 12150 
# xsetwacom --set "$id_eraser" MapToOutput 1920x1080+0+0

# 16:10モニタ時
xsetwacom --set "$id_stylus" MapToOutput 1920x1200+0+0 
xsetwacom --set "$id_eraser" MapToOutput 1920x1200+0+0 

xsetwacom --set "$id_pad" Button 3 key Esc

自分のシステムでは、実際の設定はここでDISPLAY/XAUTHRIRYのexport後、pythonで作った状況認識・設定用スクリプトをさらに呼び出すという煩雑なものにしていますが、あまりに記事が長くなりすぎると思ったため、最小限のシェルスクリプト設定で再現してみました。書いてみて思いましたが、これで実にシンプルで実用的、必要十分かなぁ…

繰り返しになりますが、別にこんな自動設定にせずとも、設定スクリプトxfceなどデスクトップ環境のスタートアップ設定に指定して、ペンタブは常時挿しっぱなしとか、デスクトップのパネルアイコンに設定スクリプトを指定して挿すたびに自分でクリックとかで十分使い物になりますけどね…

わすれちゃいけない必須設定 for gimp

最後にこれは忘れちゃいけない、gimp側の設定。

f:id:dothiko:20150427110713j:plain

これでとりあえず筆圧にスクリーンを設定しとけばいいわけです。傾きとかは使ってないのでわかりません… stylusだけでなくeraserにも設定するのを忘れずにね! (あと、「保存」ボタンを押すのも忘れずに)

うむ、使えますな。

うーむ、vividに移行する理由がまたひとつ減ってしまった…(;´Д`)