Synaptics タッチパッド

提供: ArchWiki
Touchpad Synapticsから転送)
ナビゲーションに移動 検索に移動

関連記事

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

ヒント: xf86-input-synaptics はメンテナンスモードに移行しておりアップデートは予定されていません。可能であれば libinput を使うようにしてください。libinput は別のアプローチによる実装がされており、マルチタッチ機能を認識・処理することができます。
ノート: GNOME コントロールセンターでタッチパッドを設定したい場合、libinput ドライバーを使ってください [1]

目次

インストール

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

設定

タッチパッドの設定をする主な方法は Xorg サーバーの設定ファイルを使うことです。xf86-input-synaptics をインストールした後、デフォルトの設定ファイルが /usr/share/X11/xorg.conf.d/70-synaptics.conf に作られます。ユーザーはこのファイルを /etc/X11/xorg.conf.d/ にコピーしてから編集することで様々なドライバーオプションを使うことができます。利用できるオプションの完全なリストは synaptics(4) のマニュアルページを参照してください:

$ man synaptics

よく使われるオプション

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

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "TapButton2" "3"
        Option "TapButton3" "2"
        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"
        Option "FingerLow" "30"
        Option "FingerHigh" "50"
        Option "MaxTapTime" "125"
        ...
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) 二本指スクロールの精度を設定する値。
FingerLow
(integer) 指の圧力がこの値を下回った場合、ドライバーは指が離れたと認識します。
FingerHigh
(integer) 指の圧力がこの値を上回った場合、ドライバーは指が触れたと認識します。
MaxTapTime
(integer) タップと認識する強さを設定します。値を減らした場合はっきりとタップする必要があります。パラメータを適切に設定することで手がパッドに触れたときに誤って認識される可能性を減らせます。
VertScrollDeltaHorizScrollDelta
(integer) スクロールの速度を設定します。一見すると数値を上げるとスクロールが速くなりそうですが、数値を高くするほど精度が上がってスクロールが遅くなります。負の値を指定すると macOS のようなナチュラルスクロールになります。

通常、設定はマシンによって異なります。synclient を使ってオプションを調べるのが推奨されています。

ノート:
  • タッチパッドに手が触れて TapButton2 オプションが実行されてしまう (おそらくクリップポードの貼り付けがされます) ことが頻繁にある場合、二本指のタップが使えなくなっても気にしないのならば、TapButton20 に設定してください。#タイピング中はタッチパッドを無効にするも参照。
  • 最近のバージョンでは "Coasting" (惰性) 機能がデフォルトで有効になっており、タッチパッドから手を離してもタップやクリックをしないとスクロールが止まらないという望ましくない挙動を示すことがあります。このため、少しだけスクロールしたいときは、(端を使ったりマルチタッチのオプションで)スクロールをしてからすぐにタッチパッドをタップしなくてはなりません。そうしないと永遠にスクロールし続けてしまいます。この機能を無効にしたい場合は、CoastingSpeed0 に設定してください。
  • タッチパッドが敏感すぎる場合、FingerLowFingerHigh の値を変更してください。FingerLowFingerHigh よりも低い値に設定する必要があるので注意してください。

Xfce4/Cinnamon

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

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

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

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

MATE

MATE でもタッチパッドを設定することができます:

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

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

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

実行中に設定

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

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

コンソールツール

  • Synclient (推奨) — ライブ環境で Synaptics ドライバーの設定をするためのコマンドラインツール、synaptics ドライバーのメンテナによって開発されており synaptics ドライバーと一緒に提供されています
http://xorg.freedesktop.org/ || xf86-input-synaptics
  • xinput — デバイスを設定するための小さな多目的の CLI ツール
http://xorg.freedesktop.org/ || xorg-xinput

グラフィカルツール

  • GPointing Device Settings — synaptics のタッチパッドなど、システムに接続された複数のポインティングデバイスをその場でグラフィカルに設定することができます。このアプリケーションは synaptics ドライバーのグラフィカルなタッチパッド設定の推奨ツールとして GSynaptics を置き換えます。
http://live.gnome.org/GPointingDeviceSettings || gpointing-device-settingsAUR
ノート: Synaptics のタッチパッドで GPointingDeviceSettings を使うには xf86-input-synapticslibsynapticsAUR の両方をインストールする必要があります。
  • kcm_touchpadKDE Plasma 5 の新しい設定ツール。システム設定の入力デバイスにモジュールを提供します。古い synaptikskcm-touchpad モジュールを置き換えます。
https://cgit.kde.org/plasma-desktop.git/tree/kcms/touchpad || plasma-desktop

高度な設定

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 TapButton2=3
  • タッチパッドを無効にする: $ synclient TouchpadOff=1

synclient でオプションをテストした後は、/etc/X11/xorg.conf.d/70-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 を押す)。

xev

xorg-xev ツールはリアルタイムでタップやクリック、圧力や位置などのパラメータを表示することができます。Synaptics のデフォルト設定を細かく調整したいときに便利です。xev は X から起動することができ、何も指定する必要がありません。"-event" パラメータを使うことで、表示するイベントのタイプを制限することが可能です。

回転スクロール

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

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    ...
    Option      "CircularScrolling"          "on"
    Option      "CircScrollTrigger"          "0"
    ...
EndSection

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

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

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

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

ナチュラルスクロール

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

/etc/X11/xorg.conf.d/70-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')
ヒント: bumblebee で外部モニターを使用している場合、コマンドの前に DISPLAY=:8 を付けることで2番目の X サーバーでタッチパッドを設定することができます。

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

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

最後の2行のどちらかをコピーしてください、2行ともコピーしてはいけません。これで xbindkeys を再起動したら Ctrl+Shift+Space でトラックパッドを切り替えることができるはずです。

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

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

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

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

$ synclient PalmDetect=1

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

$ synclient PalmMinWidth=

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

$ synclient PalmMinZ=

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

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

#synclient PalmDetect=1
Option "PalmDetect" "1"
#synclient PalmMinWidth=10
Option "PalmMinWidth" "10"
#synclient PalmMinZ=200
Option "PalmMinZ" "200"
警告: タッチパッドによっては、カーネルが手のひらを検出する領域を常に0としてしまう 問題 が発生することがあります。多くの場合、この問題が起こると手のひら検出が使えなくなります。修正がされるまで、synaptics に パッチ をあてて、手のひら検出に Z だけを使用するようにすることができます。
ヒント: 手のひら検出に問題が発生する場合、libinput を試してみるという手もあります。

.xinitrc を使う

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

$ syndaemon -i 0.5 -t -k &
-i 0.5
アイドル時間を0.5秒に設定します。このアイドル時間は最後のキーの押下からタッチパッドをまた有効にするまで何秒間待機するかを指定します。
-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 の助けを借りて、外付けのマウスが接続されたときにタッチパッドを自動的に無効にすることが可能です。以下のルールのどれか一つを使って下さい。

ベーシックなデスクトップ

デスクトップ環境のセッションがない環境のベーシックなルールは以下の通りです:

/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"

マウスが接続されていないときでもタッチパッドが起動時に無効になってしまう場合、上記の KERNEL と ACTION パラメータの間に以下を追加してみてください:

ATTRS{name}!="*TouchPad", ATTRS{name}!="*Stick",

GDM

GDM は Xauthority ファイルをランダムな名前のディレクトリ内の /var/run/gdm に保存します。Xauthority ファイルの実際のパスは ps ax を使うことで確認できます。また、何らかの理由で一人のユーザーに複数の 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 -print0 -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 -print0 -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 オプションに合わせてコマンドを変更してください。

AUR パッケージ touchpad-state-gitAUR は上記の udev ルールを処理するために作られました。udev ルールとスクリプトが入っています:

# touchpad-state [--off] [--on]

GNOME

GNOME を使っている場合、GNOME シェルの拡張 Touchpad Indicator をインストールして、設定から "Switch Method" を "Synclient" に変更して "Automatically switch Touchpad On/Off" を有効にしてください。

KDE

Plasma を使っている場合、plasma-desktop パッケージでタッチパッドを管理できます。

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"

トラブルシューティング

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

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

  • スリープモードやレジュームモードにもう一度入ってみる。
  • 適切なカーネルモジュールを一度取り除いてからもう一度ロードする。
ノート: 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/70-synaptics.conf が MATE で適用されない

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

ALPS タッチパッド

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

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

/etc/X11/xorg.conf.d/70-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

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

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

ALPS タッチパッド

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

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

  • Acer Aspire 7750G
  • Dell Latitude E6230, E6520, E6430, 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

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

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

$ 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 モジュールをインストールする必要があります。

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

Elantech タッチパッド

ASUS x53s など Elantech のタッチパッドが載っているノートパソコンで誤検出が起こることがあります。そういう場合は AUR から psmouse-elantechAUR[リンク切れ: アーカイブ: aur-mirror] パッケージをインストールしてください。

タッチスクリーンとタッチパッドを搭載したノートパソコン

Dell XPS 12 や Dell XPS 13 のような、タッチスクリーンとタッチパッドの両方が付いているノートパソコンでも問題が発生します。i2c_hid ドライバーをブラックリスト化することで修正できますが、タッチスクリーンが使えなくなるという副作用があります。

この問題は 既知の問題 です。このスレッド も参照してください。

カーネル 3.15 以降では、モジュールをブラックリストに入れるとタッチパッドが完全に動かなくなってしまいます。ブラックリストを削除することで部分的に動作させることができます、FS#40921 を見て下さい。

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

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

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

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

Elantech 製のタッチパッドでマルチタッチが使えない

[2] を見てください。

カーソルが飛び回る

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

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

タッチパッドデバイスが /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

上記の場合、Handlersmouse0event1 なので、/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"
ノート: 上記の設定で Synaptics は1回のボタン押下を3回に認識します。Oskar Sandberg によって書かれたパッチでクリックを解除できます [3]

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

AUR にはビルドを自動化するパッケージビルドファイルもあります: xf86-input-synaptics-lgAUR[リンク切れ: アーカイブ: aur-mirror]

パッケージをビルドするには、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/70-synaptics.confOption "FastTaps" "1" を追加する必要があります:

/etc/X11/xorg.conf.d/70-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/70-synaptics.conf のタッチパッドセクションに "GrabEventDevice" オプションを追加・修正してください:

/etc/X11/xorg.conf.d/70-synaptics.conf
...
Option "GrabEventDevice" "boolean"
...

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

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

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

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

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

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

/etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        # Enable clickpad/multitouch support
        Option "ClickPad" "true"
        # Middle-button emulation is not supported
        Option "EmulateMidButtonTime" "0"
        # Define right soft button at the bottom
        Option "SoftButtonAreas"  "50% 0 82% 0 0 0 0 0"
EndSection

この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 軸の範囲を確かめて下さい。

Arch からシャットダウンするとタッチパッドが認識されなくなる

Arch Linux から通常のシャットダウンをした後に、特定のタッチパッド (特に elantech のタッチパッド) がデバイスとして認識されなくなることがあります。この問題を解決する方法は複数あります:

  • Windows パーティションやインストールディスクを起動して、シャットダウンする。
  • シャットダウンした後にコンピュータを起動する前に1分ほど待つ。
  • https://bugzilla.kernel.org/show_bug.cgi?id=81331#c186 に書かれているように、Elantech タッチパッドのフィックスを行うパッチがカーネルにマージされています。Gigabyte P34, P35v2, X3 がデフォルトでサポートされており、他の機種については (XMG などの Gigabyte ノートパソコンのリブランド製品) i8042.kbdreset=1 をカーネルパラメータで設定することができます。

トラックポイントとクリックパッド

新しい Thinkpad にはトラックポイントの物理ボタンが存在せず、代わりにクリックパッドの上部をボタンとして使います (Left, Middle, Right)。人間工学から考えるとどうなのかということは置いておいて、これは現在の Xorg で問題なく動作します。しかしながら、中ボタンによるマウスホイールのエミュレーションはまだサポートされていません。トラックポイントを使用するときは AUR から xf86-input-evdev-trackpointAUR をインストールしてパッチのあたった正しい設定がなされたバージョンを入れて下さい。

クリックパッド/Forcepad: ダブルクリック、クリックアンドドラッグ

HP Envy 15 x360 などの新しいノートパソコンでは物理ボタンを離したときに ButtonRelease イベントが送信されず、クリックパッドから指を離した時に送信されることがあります [5]。この問題は drivers/media/input/synaptics.c のカーネルバグが原因です [6]。一時的な対応策は [7] を見て下さい。

ASUS のタッチパッドが PS/2 FocalTech emulated mouse としてしか認識されない

  1. 使用している Linux カーネルのヘッダーをインストール
  2. https://github.com/hanipouspilot/focaltech-dkms から focaltech-dkms をインストール
  3. コンピュータを再起動
  4. "Mouse and Trackpad" の設定で設定を編集

上記の方法で解決しない場合、https://github.com/vlasenko/hid-asus-dkms の dkms を使ってみてください。詳しくは https://bugzilla.kernel.org/show_bug.cgi?id=120181 を参照。

参照