対象とするUbuntuのバージョン
- 全て
概要
この文書は、 https://help.ubuntu.com/community/Logitech_Marblemouse_USB を和訳したものです。誤訳、解釈間違いと思われる箇所については原文を参照下さい。 本文書では、Logitech Marble Mouse (USB)の設定方法を解説します。
Ubuntu 10.04, 10.10
Marble MouseをUbuntu 10.04, 10.10で設定するには、/etc/X11/xorg.confを編集して下さい。 下記に一例を示します。snippets(コードの一部分を設定ファイルに切り貼りする)(訳注: /etc/X11/xorg.conf.dや/usr/lib/X11/xorg.conf.dや/usr/share/X11/xorg.conf.d以下に設定を保存する)より、/etc/X11/xorg.confに直接設定を書き加える方が確実のようです。snippetsによる方法は、ここにあるように環境によっては正常に機能しないことがあるかも知れません。
下記の設定では、各ボタン(上図参照)に以下の機能を割り当てます。
- 通常の左ボタン
- 真ん中ボタン - 選択文字列の貼り付け、Firefoxでのリンクを新しいタブで開く、等々に使用。
- トラックボールによる、縦、横のホイールボタン
- 通常の右ボタン
下記を/etc/X11/xorg.confに追記して下さい。
Section "InputClass"
Identifier "Marble Mouse"
MatchProduct "ImExPS/2 Logitech Explorer Mouse"
# 新しいものの場合
# MatchProduct "Logitech USB Trackball"
MatchIsPointer "on"
MatchDevicePath "/dev/input/event*"
Driver "evdev"
Option "ButtonMapping" "1 8 3 4 5 6 7 2 9"
# 下記のEmulateWheelButtonと併せて上図の2ボタンをホイールボタンにする場合
# Option "ButtonMapping" "1 9 3 4 5 6 7 8 2"
Option "EmulateWheel" "true"
Option "EmulateWheelButton" "9"
# 上記のButtonMappingと併せて上図の2ボタンをホイールボタンにする場合
# Option "EmulateWheelButton" "8"
Option "ZAxisMapping" "4 5"
Option "XAxisMapping" "6 7"
Option "Emulate3Buttons" "false"
EndSectionMatchProductが"ImExPS/2 Logitech Explorer Mouse"であることに注意して下さい。これは、かなり古いMarble Mouseのものであり、あなたが持っているものとは異なっているかも知れません。以下のコマンドを実行して出力を確認し、必要に応じてあなたの環境に合わせて修正して下さい。
dmesg | grep Logitech
MatchProductの行を、あなたの持っているデバイスのものに合わせて書き換えて下さい。 別の例としては、
MatchProduct "Logitech USB Trackball"
などが考えられます。
Ubuntu 9.10、または、より古いバージョン
概要
入力デバイスはHalによって設定されます。つまり、xorg.confに設定した内容は、Xの開始時に無視されるということです。Halの設定ファイルは/etc/hal/fdi/policyに格納される、拡張子が.fdiであるファイルです。設定を変更した際は、X(もしくはコンピュータ)を再起動して下さい。
Ubuntu 9.10 - 24-Mar-2010
Halには既知の問題があり、それを回避するには以下の設定を試してみて下さい。
$HOME/bin/trackball.shを下記のように編集します。
dev="Logitech USB Trackball" we="Evdev Wheel Emulation" xinput set-int-prop "$dev" "$we Button" 8 8 xinput set-int-prop "$dev" "$we" 8 1 # xinput set-int-prop "$dev" "$we" 8 1 # xinput set-int-prop "$dev" "$we Button" 8 9 # xinput set-int-prop "$dev" "$we X Axis" 8 6 7 # xinput set-int-prop "$dev" "$we Y Axis" 8 4 5 # xinput set-int-prop "$dev" "Drag Lock Buttons" 8 8
trackball.shの開始行が#!/bin/bashであることに注意して下さい。
- スクリプトを実行可能に設定して下さい。
chmod +x $HOME/bin/trackball.sh
$HOME/.bashrcに以下を追記します。
xmodmap $HOME/.Xmodmap > /dev/null 2>&1 $HOME/bin/trackball.sh
$HOME/.Xmodmapを以下のように編集します。
pointer = 1 8 3 4 5 6 7 9 2
ログインしなおすと、下記の状態となります。
ボタン1 - 左ボタン
ボタン2 - 押しっぱなしでスクロール。クリックで 戻る
ボタン3 - 真ん中ボタン
ボタン4 - 右ボタン
Halによる縦、横スクロールの設定例
上図におけるボタン2を押しっぱなしにすることで、縦、横のスクロールを可能にするには、/etc/hal/fdi/policy/mouse-wheel.fdiを以下のように編集して下さい。
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.product" string="Logitech USB Trackball">
<merge key="input.x11_options.ButtonMapping" type="string">1 2 3 4 5 6 7 8 9</merge>
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">8</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>
</device>
</deviceinfo>
Halによる縦スクロールの例
上図におけるボタン2を押しっぱなしにすることで、縦のスクロールを可能にするには、/etc/hal/fdi/policy/mouse-wheel.fdiを以下のように編集して下さい。
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.product" string="Logitech USB Trackball">
<merge key="input.x11_options.ButtonMapping" type="string">1 8 3 9 2</merge>
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">8</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">false</merge>
</match>
</device>
</deviceinfo>
Halによる左利き向け設定の例
左利きの方向けの設定にするには、/etc/hal/fdi/policy/mouse-wheel.fdiを以下のように編集して下さい。右利きの方向けの設定はコメントアウトしてあります。
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.product" string="Logitech USB Trackball">
<merge key="input.x11_options.Buttons" type="string">9</merge>
<merge key="input.x11_options.EmulateWheel" type="string">true</merge>
<merge key="input.x11_options.EmulateWheelTimeout" type="string">300</merge>
<!-- Left hand -->
<merge key="input.x11_options.ButtonMapping" type="string">3 9 1 4 5 6 7 8 2</merge>
<merge key="input.x11_options.EmulateWheelButton" type="string">9</merge>
<!-- Right hand -->
<!-- <merge key="input.x11_options.ButtonMapping" type="string">1 8 3 4 5 6 7 2 9</merge> -->
<!-- <merge key="input.x11_options.EmulateWheelButton" type="string">8</merge> -->
<merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
<merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
<merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
</match>
</device>
</deviceinfo>
Firefox
Firefoxで縦スクロールが機能しない場合は、about:configを開き、下記の設定項目、および、値を確認して下さい。
mousewheel.horizscroll.withnokey.action user set integer 0 mousewheel.horizscroll.withnokey.sysnumlines user set boolean true
真ん中ボタン
現時点では、上記のボタンマッピング設定はHalによって無視されます(訳注: 「上記」が何を指すのか理解できませんでした)。9.04では正常に適用されます。設定は重複させないで下さい。小さい方のボタンを真ん中ボタンとして使いたいときのみ、問題があります。簡単なワークアラウンドは、xmodmapでボタンマッピングをすることです。例えば、小さいボタンの左の方を真ん中ボタンとして使うには、.Xmodmapに下記を記述して下さい。
pointer = 1 8 3 4 5 6 7 2 9
2と8を入れ替えるだけです。もし、小さいボタンの右の方を真ん中ボタンとして使いたい場合は、2と9を入れ替えて下さい。.Xmodmapは次回のログイン時に読み込まれます。手動で設定を反映させるには、下記を実行して下さい。
$ xmodmap .Xmodmap
xmodmapを使用すると、接続されているすべてのマウスに影響します。別の手法としては、xinputを使って特定のデバイスのボタンマッピングだけを変更するものがあります。
$ xinput set-button-map "Logitech USB Trackball" 1 8 3 4 5 6 7 2 9
xinputは、トラックボールが32個のボタンを持っていると報告するかも知れません。xinputを使う場合、例えばfluxboxのようないくつかのウィンドウマネージャは、本当にはボタンが存在しなくても全てのボタンをマップすることを要求します。fluxboxやそれに類似したウィンドマネージャでは下記のようにして左利きの方向けに設定することができます。大きい方のボタンの右の方を左ボタンとして、大きい方のボタンの左の方を右ボタンとして、小さい方のボタンの右の方を真ん中ボタンとして、そして、小さい方のボタンの左の方をスクロールボタンとして割り当てます。
$ xinput set-button-map "Logitech USB Trackball" 3 9 1 4 5 6 7 8 2 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
もし、別のデバイスを使っていて、デバイスの識別名が判らない場合は、下記コマンドを実行して調べて下さい。
$ xinput list
HALによる設定は、デフォルトのUbuntu 9.10では機能しないかも知れません
Ubuntu 9.10 (Karmic Koala)はgnome-settings-daemon 2.28.1を搭載しており、それは/etc/hal/fdi/policy/の設定を無視します。これはhttp://bugs.debian.org/cgi-bin/bugreport.cgi?bug=552279としてバグ登録されています。ワークアラウンドはgnome-settings-daemonのマウス検出機能をhttp://bbs.archlinux.org/viewtopic.php?pid=644304にあるような方法で無効化することです。ワークアラウンドの適用後は再起動が必要になるかも知れません。その後、HALのfdiファイルを編集し、HALを再起動することで好みの状態に設定できることでしょう(設定内容によってはモジュールのリロードが必要になることもあります)。
$ lshal | less
あるいは、同様のコマンドを使ってfdiの設定が正常に適用されたかどうかを確認することができます。
別の手法: xinputによる設定
HALを使いたくない場合(もしくはUbuntu 9.10で、上記のワークアラウンドを適用したくない場合)、xinputを使用することでもLogitech Marbleを設定することができます。
縦、横スクロールを小さい方のボタンの左の方に割り当て、ドラッグロックを小さい方のボタンの右の方に割り当てる例です。
xinput set-button-map "Logitech USB Trackball" 1 2 3 4 5 6 7 8 9 xinput set-int-prop "Logitech USB Trackball" "Evdev Wheel Emulation Button" 8 8 xinput set-int-prop "Logitech USB Trackball" "Evdev Wheel Emulation" 8 1 xinput set-int-prop "Logitech USB Trackball" "Evdev Wheel Emulation Axes" 8 6 7 4 5 xinput set-int-prop "Logitech USB Trackball" "Evdev Wheel Emulation X Axis" 8 6 xinput set-int-prop "Logitech USB Trackball" "Evdev Drag Lock Buttons" 8 9
bashスクリプト(ここではmarbleScroll.shとします)に上記を追加して下さい。
スクリプトを実行します。
$ sh marbleScroll.sh
設定した内容を確認するには下記を実行します。
$ xinput list-props "Logitech USB Trackball"