2010/05/02

【ubuntu 10.04】やったー!! @は無線LANだけだ!【LTS】

黄金週間。どっぷり楽しんでるドラPでございます。こんにちわ。

ここ数日、寝不足ぎみで「Ubuntu 10.04 LTS on X100e」を満喫(苦しんで悶絶)してますが、かねてから懸案事項だった。 『タッチパッドの無効化』と『トラックポイントとセンタークリックでのスクロール』ですが・・・。

やっと・・・やぁっっっっっっっと実現できました。 もちろん私個人の力ではありません。 世界中の親切な方々が発信されている、Web上の情報を元にしてます(まぁ、ドラPなんてそんなもの・・・)。

方法は言われてみればいたって簡単。

「『xinput』を使えばよろしいのですよ! 奥さん!!」
情報元は「ThinkWiki」。Thinkpadユーザなら知らない人は居ないであろう有名っぽいサイトですが・・・。 すみません、存在は知ってましたが、今回UbuntuでX100eを満喫(悶絶)するまで、全然見てませんでした。【ごめんなさい。】m(_ _)m

だってここ、なんだか見づらくないですか? 欲しい情報に辿り着きにくいし!(私だけ?)
すみません、情報を提供してくださってる方々に失礼でしたね。もうね・・・浮き足立っちゃって・・・。

「そんなときは、奥さん! このページ左上の『Search』が便利なんですよ!」

ごめんなさい、あまりにうれしくて、興奮状態なんです。 見逃してやってください。
このページの「Search」窓から調べたい単語を、例えば「config trackpoint」なんて風に入れてあげるんです。 そしたら、あぁ~ら不思議。 それっぽい結果がリストアップされてるではありませんか!

@はページを表示して、情報を参考にするだけです。 どうです? 簡単でしょ??

・・・って、ちっとも簡単じゃねぇ~~!!(#ノ  ̄△ ̄)ノ
そもそも横文字ってだけでもストレスなのに、なんだか「結論」・・・的な落ちがないように見える。 結局【どうすればいいですか?】
何日も「Try & Error」を繰り替えしました。

TrackPointは、「/usr/lib/X11/xorg.conf.d/」に「20-trackpoint.conf」とでも名付けてファイルを置いてやり、

Section "InputClass"
        Identifier "Trackpoint Wheel Emulation"
        MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc.  Composite TouchPad / TrackPoint"
        MatchDevicePath "/dev/input/event*"
        Option "EmulateWheel" "true"
        Option "EmulateWheelButton" "2"
        Option "Emulate3Buttons" "false"
        Option "XAxisMapping" "6 7"
        Option "YAxisMapping" "4 5"
EndSection

と記述して、再起動すればOK。これで次回ログイン時から、素敵なトラックポイント生活が送れるようになります(ぇ

だが、しかし・・・忘れてならないのが・・・そう!タッチパッド!!

こいつが曲者で、9.10ならば「.fdi」ファイルを作成して無効化出来たんですが・・・。
トラックポイント同様、HALから方式の変わった10.04では、この方法は通じません。(もちろん試しましたが無視されました;)

そこで、ThinkWikiのページを斜め読みでなく、今度は正面からじっくりと読んで行きます。
何々・・・【えーっと・・・。】

If you want to modify changes on the fly, you can do so with xinput(中略).
「もしも起動中(もしくは実行中)に変更したい場合は、『xinput』で実現できます。」
Note that these changes are not saved when the xserver is restarted. However, you can add the lines e.g. in your .xsessionrc (depends on your distribution) so they are executed every time X starts.
「これらの変更は、xserverが再起動すると保存されません。例えば、.xsessionに数行追加すれば、X実行時にいつでも有効になります。」

なるほど、なるほど。
正面からじっくり読む・・・とは言え、意訳の斜め読みです。 ふむふむ、どちらにしろ「xinput」を勧めてるのね。

ではでは、xinputについて少し調べてみましょう・・・。

~$ man xinput

うは・・・長いな。色々オプションがありますが、「--list」オプションを指定すると、対応しているデバイス情報を表示してくれるらしいです。

~$ xinput --list
⎡ Virtual core pointer                     id=2 [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer               id=4 [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad               id=12 [slave  pointer  (2)]
⎜   ↳ Macintosh mouse button emulation         id=13 [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                    id=14 [slave  pointer  (2)]
⎣ Virtual core keyboard                    id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
↳ Power Button                             id=6 [slave  keyboard (3)]
↳ Video Bus                                id=7 [slave  keyboard (3)]
↳ Power Button                             id=8 [slave  keyboard (3)]
↳ Sleep Button                             id=9 [slave  keyboard (3)]
↳ Integrated Camera                        id=10 [slave  keyboard (3)]
↳ AT Translated Set 2 keyboard             id=11 [slave  keyboard (3)]

ほほぉ~。これはいい情報ですね。「TPPS/2 IBM TrackPoint」と「SynPS/2 Synaptics TouchPad」という気になる出力結果がありますな。これをどうやら「ごにょごにょ」すれば言い訳です。
今度は、欲しい情報の詳細をもらいましょう。

~$ xinput --list-props "TPPS/2 IBM TrackPoint"
Device 'TPPS/2 IBM TrackPoint':
        Device Enabled (127): 1
        Device Accel Profile (246): 0
                ~(略)~
        Evdev Middle Button Emulation (297): 2
        Evdev Middle Button Timeout (298): 50
        Evdev Wheel Emulation (299): 0
        Evdev Wheel Emulation Axes (300): 0, 0, 4, 5
        Evdev Wheel Emulation Inertia (301): 10
        Evdev Wheel Emulation Timeout (302): 200
        Evdev Wheel Emulation Button (303): 4
        Evdev Drag Lock Buttons (304): 0

う・・・長いな・・・。なるほど、「Evdev Wheel Emulation」こいつを"1"有効?にしてやればいいようです。ThinkWikiのページにもそう書いてありますね。

To enable vertical scrolling

 xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
 xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
 xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200
なるほどなるほど、掴めてきました。状態を変更したいデバイスのプロパティをxinputコマンドで指定してやれば良いということのようです。
ThinkWikiのページには、この後水平スクロールや、openSUSE11.2でUSBのThinkpadキーボードを使う為の説明が続きます。
更に後にこんな記述があります。

To do these automatically without worrying about id number, generate a bash script file:
「id番号を気にせずにこれらを自動で行うには、bashスクリプトを作成します。」

「bashスクリプト」ももちろん気になりますが、問題は「id番号を気にせずに」の部分。そうなんです、環境によってもそうですが、同じ環境でも、接続デバイスの違いでid番号は変化する可能性があります。
そんな「変わるかも知れない」id番号をスクリプトに書いたり設定ファイルに書いたところで、まったく実用性がありません。

そこで、ThinkWikiのページにある。スクリプトの登場となるわけです。
詳細は該当ページを見て頂くとして、ここで2つ注意があります。私のページや、こういったWeb上の情報を見て色々試すのは結構なのですが、失敗や不具合を招く恐れがあることです。最悪ハングしたり、まったく入力を受け付けなくなる可能性もあると言うことです。

なので、データのバックアップを取っておくとか、不具合対処時の対応方法なども調べた上で、最低限なんとか出来る準備を行った上で「Try & Error」をしてください。
「そのままにしておくと、大変なことになりますよ?」(チャラララ~~ン♪)
2つめの注意としては、Web上の情報はあくまで『参考』であって、『それが全てではない』こと。その真偽は見てるこちら側にはわからないということです。
欲しい情報を見つけても直ぐに飛びつかずに、もっと情報を探してみるとか、自分でなんとかして確かめない限り鵜呑みにしてはいけません。
必ず・・・ではないですが、間違いや嘘が書いてあったり、いいかげんな情報だったりすることもあるのです。

え?うちですか? もちろん嘘八百、紛らわしい、誇大広告(ry・・・

冗談はさておいて、2つ目の注意に絡んでるのですが、参考ページのままでは当方の環境ではエラーが出てしまいます。

~$ sh trackPointScrolling.sh
X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  141 (XInputExtension)
Minor opcode of failed request:  57 ()
Serial number of failed request:  18
Current serial number in output stream:  19

色々試した結果、「xinput set-int-prop $id "Evdev Wheel Emulation Timeout" 8 200
」の行でエラーが出ていたようです。
さらに試行錯誤した結果、以下のようにスクリプトを修正して、トラックポイントとセンタークリックでスクロール機能を実現出来ました。

ドラP版 trackPointScrolling.sh (なんだか悔しいので「UltraNavi.sh」に改名しましたがw)
--ここから--
#!/bin/sh
xinput list | sed -ne 's/^[^ ][^V].*id=\([0-9]*\).*/\1/p' | while read id
do
        case `xinput list-props $id` in
        *"Middle Button Emulation"*)
                xinput set-int-prop $id "Evdev Wheel Emulation" 8 1
                xinput set-int-prop $id "Evdev Wheel Emulation Button" 8 2
                xinput set-int-prop $id "Evdev Wheel Emulation Timeout" 16 200
                xinput set-int-prop $id "Evdev Wheel Emulation Axes" 8 6 7 4 5
                xinput set-int-prop $id "Evdev Middle Button Emulation" 8 0
                ;;
        esac
done

# disable middle button 
#xmodmap -e "pointer = 1 9 3 4 5 6 7 8 2"
--ここまで--


以下が実行結果。エラーも表示されず、「Evdev Wheel Emulation」の値がきちんと変わっております。もちろん中クリック押しながらトラックポイントをグリグリで縦横ともにスクロールします。

~$ sh trackPointScrolling.sh
~$ xinput --list-props "TPPS/2 IBM TrackPoint"
Device 'TPPS/2 IBM TrackPoint':
        Device Enabled (127): 1
                ~(略)~
        Evdev Wheel Emulation (299): 1
        Evdev Wheel Emulation Axes (300): 6, 7, 4, 5
        Evdev Wheel Emulation Inertia (301): 10
        Evdev Wheel Emulation Timeout (302): 200
        Evdev Wheel Emulation Button (303): 2
        Evdev Drag Lock Buttons (304): 0

「gsynaptics」や「gpointing-device-settings」の時のように、あるタイミングでBSキーでタッチパッド復活・・・なんてアホな現象は起きませんw
もちろん間違ってる可能性もあるので、ご自分で調べてください。(本ページを見てる方で、何か情報があればコメントください。助かります。)

さぁ! そこでいよいよ本日のメイン・イベントの『タッチパッドの無効化』です。上記事象を参考にして、こんなスクリプトを書いてみました。
説明不要だとは思いますが、タッチパッドのデバイス名は「SynPS/2 Synaptics TouchPad」です。これの「Device Enabled (127): 0」と「Synaptics Off (270): 0」が怪しいので、ターミナルコマンドで色々試した結果以下のような記述になりました。

ドラP作 NoTouchPad.sh(大そうに「作」なんてレベルじゃないですがw)
--ここから--
#!/bin/sh
xinput list | sed -ne 's/^[^ ][^V].*id=\([0-9]*\).*/\1/p' | while read id
do
        case `xinput list-props $id` in
        *"SynPS/2 Synaptics TouchPad"*)
                xinput set-int-prop $id "Device Enabled" 8 0
                ;;
        esac
done
--ここまで--

「Device Enabled」をいきなり無効化はちょっと強引過ぎると思いますが、現状これが手っ取り早いのでこのまま行きます(ぇ

ではでは、胸躍らせつつwktkで実行してみましょう!

~$ sh No_TouchPad.sh 
~$ xinput --list-props "SynPS/2 Synaptics TouchPad"
 Device 'SynPS/2 Synaptics TouchPad':
         Device Enabled (127): 0
                  ~(略)~
         Synaptics Off (270): 0
                  ~(略)~

「Device Enabled」は当然"0"になり、タッチパッドも無事無効に出来ました。「gsynaptics」や「gpointing-device-settings」の時のように、あるタイミングでBSキーで(ry・・・。
大丈夫です! これで勝つる!!(何

ただこれ一つだけ問題があります。
「NoTouchPad.sh」は、実行後にBluetoothマウスなんかを接続させると、タッチパッドが復活します。「ジョニーよ!お前もか!!(謎」
ですが、再度実行することで無効化に出来、以後電源を切らない限り、Bluetoothマウスとの共存も可能です。

さぁ!@はこれらスクリプトを起動時に実行させるなり、特定キーに割り付けて実行させるなり、起動スクリプト内に記述してやるなり、煮るなり焼くなり好きにs(ry・・・。

いや~長かったです。ほんとに疲れました。これでようやく安心して部屋の片付けやらお掃除やらに専念出来ます(*ノノ)

0 件のコメント: