# Touchpad Synaptics (日本語)

関連記事

- Xorg
- Touchpad Synaptics/10-synaptics.conf サンプル

この記事では多くのノートパソコンに載っている Synaptics (そして ALPS) タッチパッドの Synaptics インプットドライバーをインストール・設定する方法を説明しています。

## インストール

Synaptics のドライバーは公式リポジトリにある xf86-input-synaptics パッケージでインストールできます。

## 設定

タッチパッドの設定をする主な方法は Xorg サーバーの設定ファイルを使うことです。`xf86-input-synaptics` をインストールした後、デフォルトの設定ファイルが `/etc/X11/xorg.conf.d/50-synaptics.conf` に作られます。

ユーザーはこのファイルを編集して様々なドライバーオプションを使うことができます。利用できるオプションの完全なリストは synaptics のマニュアルページを参照してください:

    $ man synaptics

### よく使われるオプション

以下は多くのユーザーが設定するオプションの一覧です。オプションは全てメインの設定ファイルである `/etc/X11/xorg.conf.d/50-synaptics.conf` に追加することができます。以下のサンプル設定では vertical, horizontal, circular スクロールを有効にしています:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    Section "InputClass"
        Identifier "touchpad"
        Driver "synaptics"
        MatchIsTouchpad "on"
            Option "TapButton1" "1"
            Option "TapButton2" "2"
            Option "TapButton3" "3"
            Option "VertEdgeScroll" "on"
            Option "VertTwoFingerScroll" "on"
            Option "HorizEdgeScroll" "on"
            Option "HorizTwoFingerScroll" "on"
            Option "CircularScrolling" "on"
            Option "CircScrollTrigger" "2"
            Option "EmulateTwoFingerMinZ" "40"
            Option "EmulateTwoFingerMinW" "8"
            Option "CoastingSpeed" "0"
            ...
    EndSection

TapButton1
  (integer) 角以外での、一本指のタップをどのマウスボタンに割り当てるか設定する。
TapButton2
  (integer) 角以外での、二本指のタップをどのマウスボタンに割り当てるか設定する。
TapButton3
  (integer) 角以外での、三本指のタップをどのマウスボタンに割り当てるか設定する。
RBCornerButton
  (integer) 右下角での、一本指のタップをどのマウスボタンに割り当てるか設定する (Ubuntu のように右下角のタップを右マウスボタンに設定するには `Option "RBCornerButton" "3"` を使って下さい)。
RTCornerButton
  (integer) 上と同じく、右上角での、一本指のタップをどのマウスボタンに割り当てるか設定する。
VertEdgeScroll
  (boolean) タッチパッドの右端をドラッグした時に縦スクロールを有効にする。
HorizEdgeScroll
  (boolean) タッチパッドの下端をドラッグした時に横スクロールを有効にする。
VertTwoFingerScroll
  (boolean) 二本指による縦スクロールを有効にする。
HorizTwoFingerScroll
  (boolean) 二本指による横スクロールを有効にする。
EmulateTwoFingerMinZ/W
  (integer) 二本指スクロールの精度を設定する値。

全てのオプションの簡単な説明が付いたサンプルがあります。通常の設定はマシンによって異なります。synclient を使ってオプションを調べるのが推奨されています。

Note:

- タッチパッドに手が触れて TapButton2 オプションが実行されてしまう (おそらくクリップポードの貼り付けがされます) ことが頻繁にある場合、二本指のタップが使えなくなっても気にしないのならば、`TapButton2` を -1 に設定してください。
- 最近のバージョンでは "Coasting" (惰性) 機能がデフォルトで有効になっており、タッチパッドから手を離してもタップやクリックをしないとスクロールが止まらないという望ましくない挙動を示すことがあります。このため、少しだけスクロールしたいときは、（端を使ったりマルチタッチのオプションで）スクロールをしてからすぐにタッチパッドをタップしなくてはなりません。そうしないと永遠にスクロールし続けてしまいます。この機能を無効にしたい場合は、`CoastingSpeed` を 0 に設定してください。

### 他のオプション

VertScrollDelta と HorizScrollDelta
  (integer) スクロールの速度を設定します。一見すると数値を上げるとスクロールが速くなりそうですが、数値を高くするほど精度が上がってスクロールが遅くなります。負の値を指定すると OS X のようなナチュラルスクロールになります。

### GNOME/Cinnamon

GNOME のユーザーもタッチパッドの設定を編集したほうが良いかもしれません。GNOME ではデフォルトでタップによるクリックと縦スクロールが無効になっており、タイピング中のタッチパッドの使用を無効にすることができなくなっています。

Gnome 2 でタッチパッドの設定を変更するには:

1. `gconf-editor` を実行してください。
2. `/desktop/gnome/peripherals/touchpad/` フォルダ内のキーを編集してください。

Gnome 3 でタッチパッドの設定を変更するには:

1. システム設定を開いて下さい。
2. マウスとタッチパッドをクリックしてください。
3. タッチパッドタブの設定を変更してください。

Cinnamon でタッチパッドの設定を変更するには:

1. Cinnamon システム設定を開いて下さい。
2. マウスとタッチパッドをクリックしてください。
3. タッチパッドタブの設定を変更してください。

GNOME のセッティングデーモンは既存の (例えば `xorg.conf.d` で設定した) 設定を上書きしてしまうことがあります。GNOME がマウスの設定に手を付けるのを完全に止めさせることが可能です:

1. `dconf-editor` を実行してください。
2. `/org/gnome/settings-daemon/plugins/mouse/` (cinnamon なら `/org/cinnamon/settings-daemon/plugins/mouse/`) を編集してください。
3. active のチェックを外して下さい。

これでシステムの既存の synaptics の設定が使われるようになります。

Note: Gnome はユーザーごとに動いています。dconf-editor や gconf-editor を使った場合、現在のユーザーセッションだけで適用されます。コンピュータを使うユーザーごとに同じ設定を繰り返して下さい。

### MATE

GNOME と同じように MATE でもタッチパッドを設定することができます:

1. `dconf-editor` を実行してください。
2. `org.mate.peripherals-touchpad` フォルダ内のキーを編集してください。

既存の設定を MATE のセッティングデーモンが上書きしないようにするには、以下を実行してください:

1. `dconf-editor` を実行してください。
2. `org.mate.SettingsDaemon.plugins.mouse` を編集してください。
3. active のチェックを外して下さい。

### 実行中に設定

伝統的な設定方法の他に、Synaptics はオンザフライの設定もサポートしています。つまりユーザーがソフトウェアアプリケーションを使って特定のオプションを設定することができ、Xorg を再起動する必要なく即座にオプションが適用されます。これは設定ファイルに設定を記述する前に設定オプションをテストするのに便利です。

Warning: オンザフライの設定は永続的なものではありません。再起動やサスペンド・レジューム、または Xorg の再起動をすると設定はなくなります。テストや微調整、スクリプトの設定などのためだけに使って下さい。

#### コンソールツール

- Synclient (推奨) — ライブ環境で Synaptics ドライバーの設定をするためのコマンドラインツール、synaptics ドライバーのメンテナによって開発されており synaptics ドライバーと一緒に提供されています

  http://xorg.freedesktop.org/ || xf86-input-synaptics

- xinput — デバイスを設定するための小さな多目的の CLI ツール

  http://xorg.freedesktop.org/ || xorg-xinput

#### グラフィカルツール

Warning: 以下のツールには廃止された `SHMConfig` モードを必要とするものがあり、現在の xf86-input-synaptics ドライバーでは動作しません。

- GPointing Device Settings — synaptics のタッチパッドなど、システムに接続された複数のポインティングデバイスをその場でグラフィカルに設定することができます。このアプリケーションは synaptics ドライバーのグラフィカルなタッチパッド設定の推奨ツールとして GSynaptics を置き換えます。

  http://live.gnome.org/GPointingDeviceSettings || gpointing-device-settings
  Note: Synaptics のタッチパッドで GPointingDeviceSettings を使うには xf86-input-synaptics と libsynaptics の両方をインストールする必要があります。

- Synaptiks (メンテナンスされていません) — KDE のタッチパッド設定ツール。システム設定にタッチパッドの基本・高度な機能を設定するモジュールを提供します。さらに小さなシステムトレイ・アプリケーションも付いており、外付けのマウスを接続したりタイピングをするとき、タッチパッドを手動もしくは自動的にオフに切り替えることができます。このユーティリティは現在メンテナンスされていません。その上 KDE 4.11 ではクラッシュします。

  https://github.com/synaptiks/synaptiks || synaptiks

- kcm_touchpad — KDE のタッチパッド設定ツール。システム設定にタッチパッドの基本・高度な機能を設定するモジュールを提供します。さらに小さなシステムトレイのアプリケーション (plasmoid) も付いており、外付けのマウスを接続したりタイピングをするとき、タッチパッドを手動もしくは自動的にオフに切り替えることができます。2014年2月にメジャーアップデートがされ、KDE SC 4.12 以上で動作します。

  https://projects.kde.org/projects/playground/utils/kcm-touchpad/repository || kcm_touchpad

## 高度な設定

### xinput を使ってタッチパッドの機能を調べる

モデルによって、synaptic のタッチパッドには機能があったりなかったりします。`xinput` を使うことであなたのハードウェアでサポートされている機能を調べることが可能です。

- 左・中・右のハードウェアボタン
- 二本指の検知
- 三本指の検知
- 解像度の設定

まず、タッチパッドの名前を調べて下さい:

    $ xinput -list

それから `xinput` を使ってタッチパッドの機能を調べることができます:

    $ xinput list-props "SynPS/2 Synaptics TouchPad" | grep Capabilities

          Synaptics Capabilities (309):  1, 0, 1, 0, 0, 1, 1

左から右へ、数字が示している意味は:

- (1) デバイスには左の物理ボタンが存在します
- (0) デバイスには中の物理ボタンが存在しません
- (1) デバイスには右の物理ボタンが存在します
- (0) デバイスは二本指の検知をサポートしていません
- (0) デバイスは三本指の検知をサポートしていません
- (1) デバイスは縦の解像度を設定することができます
- (1) デバイスは横の解像度を設定することができます

デバイスの全てのプロパティを表示するには `xinput list-props "SynPS/2 Synaptics TouchPad"` を使って下さい。

### Synclient

Synclient を使うことで `$ man synaptics` で説明されている全てのオプションを設定することができます。現在のユーザー設定の完全なリストを表示するには:

    $ synclient -l

表示された設定オプションは全て synclient を使って操作できます。例えば:

    $ synclient PalmDetect=1 (手のひら検出を有効にする)
    $ synclient TapButton1=1 (ボタンのイベントを設定する)
    $ synclient TouchpadOff=1 (タッチパッドを無効にする)

synclient でオプションをテストした後は、`/etc/X11/xorg.conf.d/50-synaptics.conf` に追加することで設定を永続的にすることができます。

### evtest

evtest ツールはタッチパッド上の圧力と位置をリアルタイムで表示でき、デフォルトの Synaptics 設定のさらなる改良が可能です。evtest のモニタリングを起動するには:

    $ evtest /dev/input/eventX

X はタッチパッドの ID を指定してください。ID は `cat /proc/bus/input/devices` の出力を見ることでわかります。

evtest はデバイスへの排他的なアクセスを必要とするため X サーバーインスタンスと一緒に実行することはできません。X サーバーを終了するか別の仮想端末から evtest を起動してください (例えば `Ctrl+Alt+2` を押す)。

### 回転スクロール

回転スクロールは iPod のような操作を Synaptics が提供する機能です。縦や横にスクロールする代わりに（もしくはそれらに加えて）、円を描いてスクロールすることができます。ユーザーによってはこの方が素早く正確に操作できるかもしれません。 回転スクロールを有効にするには、以下のオプションを `/etc/X11/xorg.conf.d/50-synaptics.conf` のタッチパッドのデバイスセクションに追加してください:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    Section "InputClass"
        ...
        Option      "CircularScrolling"          "on"
        Option      "CircScrollTrigger"          "0"
        ...
    EndSection

CircScrollTrigger オプションは以下のどれかの値にしてください。どの端から回転スクロールを始めるかを指定します:

    0    全ての端
    1    上端
    2    右上角
    3    右端
    4    右下角
    5    下端
    6    左下角
    7    左端
    8    左上角

縦・横スクロールとあわせて回転スクロールを使いたい場合は 0 以外の値を指定したほうが便利です。その場合、スクロールのタイプはどの端からスクロールを始めたかによって決まります。

素早くスクロールするには、タッチパッドの中心で小さな円を描いて下さい。ゆっくり正確にスクロールしたいときは、大きな円を描いて下さい。

### ナチュラルスクロール

synaptics ではナチュラルスクロールを有効にすることができます。以下のように `VertScrollDelta` と `HorizScrollDelta` に負の値を使うだけです:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    Section "InputClass"
        ...
        Option      "VertScrollDelta"          "-111"
        Option      "HorizScrollDelta"         "-111"
        ...
    EndSection

### ソフトウェアトグル

タッチパッドが敏感すぎてタイピングに支障をきたす場合など、タッチパッドのオンオフを切り替えるソフトウェアトグルがあると便利だと思うかもしれません。外付けのマウスが検出された時はタッチパッドを無効にするも参照してください、これは好みの問題です。ソフトウェアトグルの利点はユーザーがコントロールできるということで、他の方法はデーモンがトラックパッドをオフにするかどうか決定します。

キーバインディングソフトウェアをまだインストールしていない場合は xbindkeys をインストールすると良いでしょう。

以下のスクリプトを `/usr/bin/trackpad-toggle.sh` などとして保存してください:

    /usr/bin/trackpad-toggle.sh

    #!/bin/bash

    synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')

次にスクリプトを使うキーバインディングを追加してください。以下のように xbindkeys を使って呼び出すのがベストでしょう (ファイル `~/.xbindkeysrc`):

    ~/.xbindkeysrc

    "/usr/bin/trackpad-toggle.sh"
        m:0x5 + c:65
        Control+Shift + space

これで `xbindkeys` を再起動したら `Ctrl+Shift+Space` でトラックパッドを切り替えることができるはずです。

もちろん Xfce4 や GNOME によって提供されている他のキーバインディングソフトウェアを使ってもかまいません。

### タイピング中はタッチパッドを無効にする

#### 自動的な手のひら検出を使う

まず最初に手のひらの検出があなたのトラックパッドで動作するか、そして設定が正しいかをテストしてください:

    $ synclient PalmDetect=1

それからタイピングして見て下さい。検出を調整するには以下のコマンドを使います:

    $ synclient PalmMinWidth=

これは手が触れたと認識する領域の広さで:

    $ synclient PalmMinZ=

これは検出が行われる最小圧力です。

適切な設定を見つけられたら、以下のように `/etc/X11/xorg.conf.d/50-synaptics.conf` に設定を保存してください:

    #synclient PalmDetect=1
    Option "PalmDetect" "1"
    #synclient PalmMinWidth=10
    Option "PalmMinWidth" "10"
    #synclient PalmMinZ=200
    Option "PalmMinZ" "200"

#### .xinitrc を使う

タイピングを始めた時に自動的にタッチパッドを無効にするには次の行を `~/.xinitrc` に追加してください (`exec` で始まる行の前に置いて下さい、そうしないとコマンドが実行されません):

    $ syndaemon -t -k -i 2 &

-i 2
  アイドル時間を2秒に設定します。このアイドル時間は最後のキーの押下からタッチパッドをまた有効にするまで何秒間待機するかを指定します。
-t
  タップとスクロールだけを無効にして、タイピング中もマウスの移動を無効にしないようにデーモンを設定します。
-k
  キーボードの活動を監視している間は修飾キーを無視するようにデーモンを設定します (例: Ctrl+左クリック)。

詳細は man ページから見ることができます:

    $ man syndaemon

ログインマネージャを使っている場合は、DE が許可するコマンドを指定する必要があります。

#### ログインマネージャを使う

ログイン後に syndaemon をバックグラウンドプロセスとして起動するには `-d` オプションが必要です。

GNOME: (GDM)

syndaemon を起動するには Gnome の自動起動するアプリケーションの設定プログラムを使う必要があります。Gnome にログインして System > Preferences > Startup Applications を見て下さい。自動起動するプログラムのタブで追加ボタンをクリックしてください。自動起動するプログラムに好きな名前を付けて、コメントも自由に入力してください (もしくは空のままにしてください)。コマンドのところに以下を加えて下さい:

    $ syndaemon -t -k -i 2 -d &

完了したら、自動起動するプログラムの追加ダイアログの追加ボタンをクリックしてください。それから作成した自動起動プログラムの横のチェックボックスにチェックが入っていることを確認してください。自動起動するアプリケーションの設定ウィンドウを閉じれば設定完了です。Gnome 3 では gnome-session-properties を実行してスタートアップアプリケーションを開いて下さい。

KDE: (KDM)

システム設定 > 起動と終了 > 自動起動 を開き、プログラムの追加をクリックして以下を入力してください:

    $ syndaemon -t -k -i 2 -d &

そしてターミナルで実行にチェックを入れて下さい。

### 外付けのマウスが検出された時はタッチパッドを無効にする

udev の助けを借りて、外付けのマウスが接続されたときにタッチパッドを自動的に無効にすることが可能です。このためには、以下の udev ルールを追加してください:

    /etc/udev/rules.d/01-touchpad.rules

    SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=1"
    SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/username/.Xauthority", RUN+="/usr/bin/synclient TouchpadOff=0"

GDM は Xauthority ファイルをランダムな名前のディレクトリ内の `/var/run/gdm` に保存します。何らかの理由で一人のユーザーに複数の authority ファイルが作られることがあります。その場合 udev ルールを以下のようにしてください:

    /etc/udev/rules.d/01-touchpad.rules

    SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=1"
    SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="remove", PROGRAM="/usr/bin/find /var/run/gdm -name username -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/usr/bin/synclient TouchpadOff=0"

ただし、これらの udev ルールは syndaemon と衝突します。タッチパッドを無効にするのと同時に syndaemon を終了させるには、以下のようなルールを使います:

    /etc/udev/rules.d/01-touchpad.rules

    SUBSYSTEM=="input", KERNEL=="mouse[0-9]", ACTION=="add", PROGRAM="/usr/bin/find /var/run/gdm -name username -print -quit", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="$result/database", RUN+="/bin/sh -c '/usr/bin/synclient TouchpadOff=1 ; sleep 1; /bin/killall syndaemon; '"

マウスを取り除いたら syndaemon が自動的に起動する場合、上の削除ルールと合わせることが可能です。手動で syndaemon を起動する必要がある場合、使用している syndaemon オプションに合わせてコマンドを変更してください。

#### X セッションが複数ある環境

複数のユーザーが存在する環境では、現在のユーザーの X 環境を検出するために少し異なるアプローチを取る必要があります。以下のスクリプトを使って下さい:

    /usr/bin/mouse-pnp-event-handler.sh

    #!/bin/sh
    ## $1 = "add" / "remove"
    ## $2 = %k from udev

    ## Set TRACKPAD_NAME according to your configuration.
    ## Check your trackpad name with:
    ## find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'
    TRACKPAD_NAME="SynPS/2 Synaptics TouchPad"

    USERLIST=$(w -h | cut -d' ' -f1 | sort | uniq)
    MOUSELIST=$(find /sys/class/input/ -name mouse*)

    for CUR_USER in ${USERLIST}; do
             CUR_USER_XAUTH="$(sudo -Hiu ${CUR_USER} env | grep -e "^HOME=" | cut -d'=' -f2)/.Xauthority"

            ## Can't find a way to get another users DISPLAY variable from an isolated root environment. Have to set it manually.
            #CUR_USER_DISPL="$(sudo -Hiu ${CUR_USER} env | grep -e "^DISPLAY=" | cut -d'=' -f2)"
            CUR_USER_DISPL=":0"

            export XAUTHORITY="${CUR_USER_XAUTH}"
            export DISPLAY="${CUR_USER_DISPL}"

            if [ -f "${CUR_USER_XAUTH}" ]; then
                    case "$1" in
                            "add")
                                    /usr/bin/synclient TouchpadOff=1
                                    /usr/bin/logger "USB mouse plugged. Disabling touchpad for $CUR_USER. ($XAUTHORITY - $DISPLAY)"
                            ;;
                            "remove")
                                    ## Only execute synclient if there are no external USB mice connected to the system.
                                    EXT_MOUSE_FOUND="0"
                                    for CUR_MOUSE in ${MOUSELIST}; do
                                            if [ "$(cat ${CUR_MOUSE}/device/name)" != "${TRACKPAD_NAME}" ]; then
                                                    EXT_MOUSE_FOUND="1"
                                            fi
                                    done
                                    if [ "${EXT_MOUSE_FOUND}" == "0" ]; then
                                            /usr/bin/synclient TouchpadOff=0
                                            /usr/bin/logger "No additional external mice found. Enabling touchpad for $CUR_USER."
                                    else
                                            logger "Additional external mice found. Won't enable touchpad yet for $CUR_USER."
                                    fi
                            ;;
                    esac
            fi
    done

`TRACKPAD_NAME` 変数はあなたのシステムの設定にあわせて変更してください。`find /sys/class/input/ -name mouse* -exec udevadm info -a {} \; | grep 'ATTRS{name}'` を実行することでマウスの名前の一覧を取得できます。トラックパッドに使うマウスを選択してください。

そして、以下の udev ルールを作ることで、USB マウスが抜き差しされてときに udev がスクリプトを実行するようになります:

    /etc/udev/rules.d/01-touchpad.rules

    SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="add", RUN+="/usr/bin/mouse-pnp-event-handler.sh add %k"
    SUBSYSTEM=="input", KERNEL=="mouse[0-9]*", ACTION=="remove", RUN+="/usr/bin/mouse-pnp-event-handler.sh remove %k"

## トラブルシューティング

### ハイバネート・サスペンドから復帰した後にタッチパッドが動作しない

スリープやハイバネーションからコンピューターを復帰したときに時々タッチパッドが動作しないことがあります。この場合、再起動しなくても以下によって戻ることがほとんどです:

- スリープモードやレジュームモードにもう一度入ってみる。
- 適切なカーネルモジュールを一度取り除いてからもう一度ロードする。

Note: Ctrl-Alt-F1 から F8 までを使うことでマウスを使用しないでコンソールを切り替えることが可能です。

    modprobe -r psmouse #psmouse happens to be the kernel module for my touchpad (Alps DualPoint)
    modprobe psmouse

それから X が起動している tty に戻してみて下さい。正しいモジュールを選べていれば、タッチパッドはまた動作するようになっているはずです。

### 中 (3番目の) マウスボタンのエミュレート

以下を `/etc/X11/xorg.conf.d/10-evdev.conf` (もしくはその他の Xorg の設定ファイル) に追加することで中クリックのエミュレーションができます:

    /etc/X11/xorg.conf.d/10-evdev.conf

    Section "InputClass"
            Identifier "Emulate Middle Butten"
            MatchIsPointer "on"
            Option "Emulate3Buttons" "on"
    EndSection

Thx to augegr

### xorg.conf.d/50-synaptics.conf が GNOME や MATE で適用されない

GNOME や MATE では、デフォルトでタッチパッドの様々な設定が上書きされます。上書きされる設定には GNOME のシステムコントロールパネルからはグラフィカルに設定することができない機能も含まれます。このため `/etc/X11/xorg.conf.d/50-synaptics.conf` が実質的に適用されない可能性があります。この挙動を止めさせるには GNOME セクションを参照してください。

### ALPS タッチパッド

ALPS のタッチパッドで、上の設定が上手く行かないときは、代わりに以下の設定を試して下さい:

    /etc/X11/xorg.conf.d/50-synaptics.conf

      Section "ServerLayout"
        ...
        InputDevice    "USB Mouse" "CorePointer"
        InputDevice    "Touchpad"  "SendCoreEvents"
      EndSection

      Section "InputDevice"
            Identifier  "Touchpad"
        Driver  "synaptics"
        Option  "Device"   "/dev/input/mouse0"
        Option  "Protocol"   "auto-dev"
        Option  "LeftEdge"   "130"
        Option  "RightEdge"   "840"
        Option  "TopEdge"   "130"
        Option  "BottomEdge"   "640"
        Option  "FingerLow"   "7"
        Option  "FingerHigh"   "8"
        Option  "MaxTapTime"   "180"
        Option  "MaxTapMove"   "110"
        Option  "EmulateMidButtonTime"   "75"
        Option  "VertScrollDelta"   "20"
        Option  "HorizScrollDelta"   "20"
        Option  "MinSpeed"   "0.25"
        Option  "MaxSpeed"   "0.50"
        Option  "AccelFactor"   "0.010"
        Option  "EdgeMotionMinSpeed"   "200"
        Option  "EdgeMotionMaxSpeed"   "200"
        Option  "UpDownScrolling"   "1"
        Option  "CircularScrolling"   "1"
        Option  "CircScrollDelta"   "0.1"
        Option  "CircScrollTrigger"   "2"
        Option  "Emulate3Buttons"   "on"
      EndSection

### タッチパッドが動作しない、Xorg.0.log は "Query no Synaptics: 6003C8" と表示している

synaptics が設定されている方法のために、synaptics モジュールの2つのインスタンスがロードされています。この情報を確認するには xorg のログファイル (`/var/log/Xorg.0.log`) を開いて下さい。以下のような箇所があるはずです:

    /var/log/Xorg.0.log

     [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "evdev touchpad catchall"
     [ 9304.803] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad catchall"

モジュールの名前が異なる2つのインスタンスがロードされているのが確認できます。こうなっていると、タッチパッドが機能しなくなります。

`/etc/X11/xorg.conf.d/50-synaptics.conf` ファイルに `MatchDevicePath "/dev/input/event*"` を追加することで二重のロードを防ぐことができます:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
            Option "TapButton1" "1"
            Option "TapButton2" "2"
            Option "TapButton3" "3"
    EndSection

X を再起動して xorg のログをもう一度見て下さい。エラーがなくなっていればタッチパッドが動作するようになっているはずです。

関連するバグレポート: FS#20830

関連するフォーラムトピック:

- https://bbs.archlinux.org/viewtopic.php?id=104769
- https://bbs.archlinux.org/viewtopic.php?pid=825690

### タッチパッドが "PS/2 Generic Mouse" や "Logitech PS/2 mouse" として検出される

これはカーネルのバグによるものでカーネルバージョン 3.3 で修正されました。タッチパッドが間違って検出されていると Synaptic インプットドライバーで設定することができません。これを修正するには、AUR のパッケージ psmouse-alps-driver をインストールしてください。

影響があるノートパソコンは以下の機種です:

- Acer Aspire 7750G
- Dell Latitude E6230, E6520, E6430 and E6530 (ALPS DualPoint TouchPad), Inspiron N5110 (ALPS GlidePoint), Inspiron 14R 5420/Turbo SE7420/SE7520 (ALPS GlidePoint)
- Samsung NC110/NF210/QX310/QX410/QX510/SF310/SF410/SF510/RF410/RF510/RF710/RV515

次を実行することでタッチパッドが正しく検出されているか確認できます:

    $ xinput list

詳しい情報はこのスレッドを見て下さい。

### Synaptics の特定の機能が使えない (マルチタッチ、スクロールなど)

場合によって Synaptics のタッチパッドが部分的にしか動作しないことがあります。二本指のスクロールや二本指の中クリックといった機能が有効になっているはずのに使えないなどです。これはおそらく上述のタッチパッドが動作しない問題と関連しています。修正方法は同じで、モジュールの二重ロードを止めて下さい。

モジュールを二重にロードしないようにしても問題が解決されない場合は、"MatchIsTouchpad" トグル (現在 synaptics の設定ではデフォルトで含まれています) をコメントアウトして見て下さい。

二本指・三本指のクリックが右クリックとして解釈され、設定しているのに中クリックが使えない場合、犯人はこのバグでしょう: https://bugs.freedesktop.org/show_bug.cgi?id=55365

### カーソルが飛び回る

ユーザーによってはカーソルが画面をジャンプするという不可解な現象が生じているようです。この問題について今のところパッチは存在しませんが、開発者は問題に気づいており対策を行っています。

また i8042 コントローラ (このデバイスは多くのノートパソコンのキーボードとタッチパッドを管理しています) に関連した IRQ losses が発生している可能性もあります。以下2つの対応策が考えられます:

1. rmmod && insmod the psmouse module 2. ブートラインに append i8042.nomux=1 を追加してマシンを再起動する

### タッチパッドデバイスが `/dev/input/*` に配置されない

そのような時は、次のコマンドを使って入力デバイスの情報を表示できます:

    $ cat /proc/bus/input/devices

"SynPS/2 Synaptics TouchPad" という名前を持っている入力デバイスを探して下さい。出力の "Handlers" セクションが指定する必要があるデバイスを示しています。

出力の例:

    $ cat /proc/bus/input/devices

     I: Bus=0011 Vendor=0002 Product=0007 Version=0000
     N: Name="SynPS/2 Synaptics TouchPad"
     P: Phys=isa0060/serio4/input0
     S: Sysfs=/class/input/input1
     H: Handlers=mouse0 event1
     B: EV=b
     B: KEY=6420 0 7000f 0

上記の場合、`Handlers` は `mouse0` と `event1` なので、`/dev/input/mouse0` を使います。

### Firefox と特別なタッチパッドイベント

アクションの設定を編集することで Firefox によってタッチパッドのタップや特定の部位のスクロールで発生する特別なイベントを有効・無効にすることができます。 Firefox のアドレスバーに about:config と入力してください。 オプションを変更するには、その行をダブルクリックします。

#### Firefox 16.0 以前

Firefox がブラウザの履歴をスクロールする（戻る/進む）のを止めてページをスクロールさせるには、以下の設定を編集してください:

    mousewheel.horizscroll.withnokey.action = 1
    mousewheel.horizscroll.withnokey.sysnumlines = true

タッチパッドの右上端（もしくは中マウスボタン）をタップすることでクリップボードに保存した URL に Firefox がリダイレクトするのを止めさせるには、以下のオプションを "false" に設定してください:

    middlemouse.contentLoadURL = false

#### Firefox 17.0 以降

現在、横スクロールはデフォルトで履歴ではなくページをスクロールするようになっています。Mac のように二本指のスワイプで戻る/進むをするには、次のように編集してください:

    mousewheel.default.action.override_x = 2

縦スクロールで戻る/進むが偶発的に発生してしまうことがあります。Firefox の横スワイプの感度を変更するには、次を編集してください:

    mousewheel.default.delta_multiplier_x

最適な値はあなたの使っているタッチパッドによって変わります、初めは `10` から試していって見て下さい。負の値にするとスワイプの方向が逆になります。

### Opera: 横スクロールの問題

同上です。修正するには、Tools > Preferences > Advanced > Shortcuts を開いて下さい。"Opera Standard" マウス設定を選んで "Edit" をクリックしてください。"Application" セクションで:

- キー "Button 6" をコマンド "Scroll left" に割り当ててください
- キー "Button 7" をコマンド "Scroll right" に割り当ててください

### LG ノートパソコンで Synaptics によるスクロールと複数のアクション

LG のノートパソコンのいくつかのモデルで問題が発生するようです。発生する問題は: Mouse Button 1 を押した時に、Synaptics がそれを ScrollUP と標準のボタン1のクリックに解釈する。ボタン2でも同様。

スクロールの問題は `xorg.conf` に以下を入力すれば解決できます:

    /etc/X11/xorg.conf.d/xorg.conf

    Option "UpDownScrolling" "0"

Note: This will make Synaptics interpret one button push as three. There is a patch written by Oskar Sandberg [1] that removes these clicks.

どうやら、Synaptics の最新バージョンでこれをコンパイルすると失敗するようです。解決方法は Synaptics の GIT リポジトリを使って下さい [2]。

AUR にはビルドを自動化するパッケージビルドファイルもあります: xf86-input-synaptics-lg。

パッケージをビルドするには、tarball をダウンロードした後、展開して、以下を実行してください:

    $ cd synaptics-git
    $ makepkg

### その他の外付けマウスの問題

まず、外付けマウスについて記述しているセクションに次の行 (もしくはこれに似ている行) が含まれていることを確認してください:

    /etc/X11/xorg.conf.d/xorg.conf

    Option     "Device" "/dev/input/mice"

"Device" 行が異なっている場合、上記のように変更して X を再起動して見て下さい。それで問題が解決しない時は、"Server Layout" セクションの touchpad を CorePointer にして:

    /etc/X11/xorg.conf.d/xorg.conf

    InputDevice    "Touchpad" "CorePointer"

外部デバイスを "SendCoreEvents" にしてください:

    /etc/X11/xorg.conf.d/xorg.conf

    InputDevice    "USB Mouse" "SendCoreEvents"

最後に以下を外部デバイスのセクションに追加してください:

    /etc/X11/xorg.conf.d/xorg.conf

    Option      "SendCoreEvents"    "true"

それでも問題が解決しないようならば、バグトラッカーにバグが報告されていないか確認したり、フォーラムを見て他に良い解決方法がないか見て下さい。

### タッチパッドの同期問題

たまに数秒間カーソルがフリーズしたり何もしていないのに動き出したりすることがあります。この挙動は `/var/log/messages.log` に記録が残ります:

    /var/log/messages.log

    psmouse.c: TouchPad at isa0060/serio1/input0 lost synchronization, throwing 3 bytes away

この問題に万能の解決方法はありませんが、複数の解決策が考えられます。

- CPU 周波数スケーリングを使っている場合、できれば "ondemand" governor を使うのを止めて "performance" governor を使って下さい。CPU の周波数が変化したときにタッチパッドが同期を喪失することがあります。
- ACPI バッテリモニターを使うのを避けて下さい。
- psmouse を "proto=imps" オプションを使ってロードしてください。これをするには、`/etc/modprobe.d/modprobe.conf` に次の行を追加します:

    /etc/modprobe.d/modprobe.conf

    options psmouse proto=imps

- 他のデスクトップ環境を試して下さい。ユーザーによっては XFCE や GNOME を使っている時だけこの問題が発生すると報告しています。

### ボタンのタップと実際のクリックの遅延

タッチパッドのタップと実際のクリックの間に遅延が発生する場合 FastTaps を有効にしてください:

有効にするには `/etc/X11/xorg.conf.d/50-synaptics.conf` に Option "FastTaps" "1" を追加する必要があります:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    Section "InputClass"
        Identifier "Synaptics Touchpad"
        Driver "synaptics"
        ...
        Option "FastTaps" "1"
        ...
    EndSection

### Xorg.log.0 が SynPS/2 Synaptics touchpad can not grab event device, errno=16 と表示する

Xorg 7.4 を使っていて、`/var/log/Xorg.0.log` にこのような警告が表示されるときは、ドライバーが Linux 2.6 のイベントプロトコルを使うときにイベントデバイスを独占的に占有しているのが原因です。それが失敗すると、X はエラーメッセージを返します。

イベントデバイスが占有されると他のユーザースペース・カーネルスペースのプログラムはタッチパッドのイベントを見ることができません。X の設定ファイルに入力デバイスとして `/dev/input/mice` が含まれている場合はこれは好ましいことですが、ユーザースペースからデバイスを監視したい時は困ることになります。

占有をコントロールするには、`/etc/X11/xorg.conf.d/50-synaptics.conf` のタッチパッドセクションに "GrabEventDevice" オプションを追加・修正してください:

    /etc/X11/xorg.conf.d/50-synaptics.conf

    ...
    Option "GrabEventDevice" "boolean"
    ...

X を再起動することで変更が適用されますが、sysclient で変更することも可能です。synclient プログラムでパラメータを変更した際は、Synaptics ドライバーを一度無効にして再度有効にするまで変更は適用されません。そのためにはテキストコンソールに切り替えてから X に再度戻して下さい。

### Windows から再起動した後に Synaptics がマルチタッチの検出をしなくなる

多くのドライバーにはファームウェアが含まれており、コンピュータが起動した時にフラッシュメモリにロードされます。このファームウェアはシャットダウン時に必ずしも取り除かれるわけではなく、また Linux のドライバーと互換性があるとは限りません。フラッシュメモリを消去する唯一の方法は再起動を使うのではなく完全にシャットダウンすることです。一般的に、オペレーティングシステムを切り替えるときに再起動を使わないのはベストプラクティスだと考えられています。

### ボタンのないタッチパッド (別名クリックパッド)

ラップトップによっては、マウスボタンが外部にあるのではなくトラッキングプレートの一部になっている特別なタッチパッドを搭載しています。例えば HP シリーズ 4500 ProBooks や ThinkPad X220、X1 ThinkPad シリーズなどがこの種のタッチパッドを使っています。デフォルトではボタンの領域全体が左ボタンとして認識されるので、2番目のマウスボタンやクリック+ドラッグが使えなくなってしまいます。以前はこうしたデバイスのサポートはサードパーティのパッチで対応していましたが、バージョン 1.6.0 から synaptics ドライバーはネイティブのマルチタッチサポートを持っています (mtdev ライブラリを使用)。ドライバーがマルチタッチを登録しても、それぞれ指の動きは記録しないため (バージョン 1.7.1 現在) クリックパッドの物理ボタンを使ってドラッグアンドドロップや他のジェスチャーをすると操作が混乱することがあるので注意してください。xf86-input-mtrack ドライバーを使うことでより良いマルチタッチサポートを得ることができます。

他のボタンを有効にするには `/etc/X11/xorg.conf.d/50-synaptics.conf` のタッチパッドセクションを修正してください (もしくは、より高い数字を前に付けた synaptics のカスタム設定ファイルを使うのも良いでしょう):

    /etc/X11/xorg.conf.d/50-synaptics.conf

    ...
    Option "ClickPad"         "true"
    Option "EmulateMidButtonTime" "0"
    Option "SoftButtonAreas"  "50% 0 82% 0 0 0 0 0"
    ...

この3つのオプションはキーであり、1つ目はマルチタッチサポートを有効にし、2つ目は中ボタンのエミュレーション (クリックパッドではサポートされていません) を無効にし、3つ目はボタンの領域を定義します。

SoftButtonAreas オプションのフォーマットは (`man 4 synaptics` を参照):

    RightButtonAreaLeft RightButtonAreaRight RightButtonAreaTop RightButtonAreaBottom  MiddleButtonAreaLeft MiddleButtonAreaRight MiddleButtonAreaTop MiddleButtonAreaBottom

上記の例はドキュメントや synaptics のパッケージで共通して使われているもので、タッチパッドの下端18%の右半分を右ボタンにします。中ボタンは定義されていません。中ボタンを定義したい場合はマニュアルに一つ重要な箇所があるので覚えておいて下さい。端を0に設定するとその方向に無限に延長されます。

以下の例ではボタン領域の右端40%を右ボタンが占めています。そしてタッチパッドの真ん中の小さな領域20%を中ボタンに設定しています。

    ...
    Option     "SoftButtonAreas"  "60% 0 82% 0 40% 59% 82% 0"
    ...

`synclient` を使って新しいソフトボタンの領域を確認できます:

    $ synclient -l | grep -i ButtonArea

            RightButtonAreaLeft     = 3914
            RightButtonAreaRight    = 0
            RightButtonAreaTop      = 3918
            RightButtonAreaBottom   = 0
            MiddleButtonAreaLeft    = 3100
            MiddleButtonAreaRight   = 3873
            MiddleButtonAreaTop     = 3918
            MiddleButtonAreaBottom  = 0

ボタンが動作しない場合は、ソフトボタンの領域が変わっていません。パッケージによる synaptics の設定ファイルがカスタム設定を上書きしていないか確認してください (AUR のパッケージには高い数字が付けられた設定を使っているものがあります)。

これらの設定を `synclient` を使ってオンザフライで変更することは出来ませんが、`xinput` は使えます:

    xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Soft Button Areas" 4000 0 4063 0 3000 4000 4063 0

このコマンドでパーセンテージは使えないため、`/var/log/Xorg.0.log` を見てタッチパッドの X・Y 軸の範囲を確かめて下さい。

### タッチパッドがマウスとして検出される

Elantech タッチパッド:

ASUS x53s など Elantech のタッチパッドが載っているノートパソコンで誤検出が起こることがあります。そういう場合は AUR から psmouse-elantech パッケージをインストールしてください。

ALPS タッチパッド:

新しいアルプス電気のタッチパッドでも間違えられることがあります。以下を実行して使っているのが新しいアルプスのタッチパッドかどうか確認してください:

    $ dmesg | grep "Unknown ALPS"
    [  569.861053] psmouse serio1: alps: Unknown ALPS touchpad: E7=73 03 0a, EC=88 b6 06

Unknown ALPS touchpad という行が表示されたら、https://github.com/he1per/psmouse-dkms-alpsv7 にあるパッチがあてられた psmouse モジュールをインストールする必要があります。

Note: このパッチは linux-input@vger.kernel.org メーリングリストの開発者によるものです。それがパッケージ化され github に投稿されています。

## 参照

- Synaptics touchpad driver

Category:

- Input devices (日本語)