web-dev-qa-db-ja.com

18.04システム全体の自然なスクロール?

これは、「自然なスクロール」、つまり「反転スクロール」を取得して、USBマウスとトラックポイントを備えたシステム全体のすべてのアプリケーションで動作することです。この問題は、12.04以来、多くの回避策でうまく機能していたので気が狂いました。

buntu Studio 18.04(xfce 4.12 desktop)を使用していますが、Preferencesに「Natural Scrolling」オプションがあります。ブラウザーやファイルマネージャー、テキストエディターなどでも期待どおりに動作します。ただし、xfce4-terminalとmousepad(テキストエディター)およびその他のアプリでは、まだ「不自然なスクロール」です。

このトピックの開発状況は誰でも知っていますか?何か不足していますか?

最初からやり直し、これらすべての回避策をテストする前に、どんな助けも歓迎します。

Ubuntu Studio 18.04.1 with xfce 4.12 4.15.0-20-lowlatency#21-Ubuntu SMP PREEMPT

1
ronso0

IIRCデフォルト(x)ubuntuアプリ全体でさえ一貫性のない「逆スクロール」動作は、GTK2とGTK3の異なるスクロール処理によるものでした。それがまだ当てはまるかどうかわかりません。

とにかく、「古いxinputトリック」がまだ機能していることがわかりました(xUbuntu 18.04.1、xinputバージョン1.6.2)。そして、再起動を持続させる方法。

テスト/一時的な解決策

現在使用可能なすべてのポインターとキーボードをリストします。

xinput list

次のようなものが表示されます。

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=9    [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [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)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]

問題のポインターのidを選択し、そのすべてのデバイスプロパティを一覧表示します。

xinput list-props 12

Device 'TPPS/2 IBM TrackPoint':
    Device Enabled (143):   1
    Coordinate Transformation Matrix (145): 1.000000, ...
    libinput Natural Scrolling Enabled (281):   1
    libinput Natural Scrolling Enabled Default (282):   0
    libinput Scroll Methods Available (283):    0, 0, 1
    libinput Scroll Method Enabled (284):   0, 0, 1
    libinput Scroll Method Enabled Default (285):   0, 0, 1
    libinput Button Scrolling Button (286): 2
    ...


これが必要なものです:libinput Natural Scrolling Enabled (281)

「現在のセッションで」「TPPS/2 IBM TrackPoint」で自然なスクロールをグローバルに有効にするには、最初に「マウスとタッチパッド」の設定でオフにします。
以下の2行のいずれかを入力し、Enterを押します。 (両方とも同じことを行います。プロパティの読み取りまたは書き込みには、その名前全体(!)またはIDを使用できるためです)

xinput set-prop 12 "libinput Natural Scrolling Enabled" 1

xinput set-prop 12 "281" 1

次に、システム設定を使用して自然な圧縮が機能しないアプリケーションでテストします。

永続的な解決策

上記のテストがマシンで機能した場合、小さなスタートアップスクリプトを使用してセッションにログインするたびに変更を適用できます。 deviceNameに一致するスクリプト部分は、 ボタンマップに関するこの回答 by @zerobandwidthからのものです。

以下のコードをnatural_scrolling.shとしてホームディレクトリまたは/any/path/youLikeに保存します

#!/bin/bash
# Find all xinput devices whose name matches any of the arguments passed here,
# then set the Natural Scrolling' property to '1' regardless of its
# current state.

# expect multiple arguments, store them as array
deviceNames="$@"

# exit if no argument is passed
if [ "$deviceNames" = "" ]; then
        echo "No argument received, exiting."
        echo "Call this script with argument(s) like 'Logitech' that match"
        echo "any of your attached pointer devices."
    exit 1
fi

for deviceName in $deviceNames
do
    deviceId=$(xinput --list | awk -v search="$deviceName" \
    '$0 ~ search {match($0, /id=[0-9]+/);\
                  if (RSTART) \
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }'\
     )
  # set device-specific property (works i.e for 'TrackPoint' & 'Logitech')
  xinput set-prop $id "libinput Natural Scrolling Enabled" 1
done

スクリプトを実行可能にする:

chmod +x natural_scrolling.sh

Unique(!)device_name文字列を引数として呼び出します:

/any/path/youLike/natural_scrolling.sh Logitech TrackPoint

それをスタートアップアプリケーションに追加します。つまり、xfceのSession&Startupプリファレンスを使用して、ログアウトして再度ログインしてテストします。

2
ronso0

残念ながら、コメントするほどの評判はありませんので、これを回答として追加する必要があります。これにつまずいた人にとって、上記のコードには非常に小さなエラーがあります。最後から2番目の行:

xinput set-prop $id "libinput Natural Scrolling Enabled" 1

読むべき:

xinput set-prop $deviceId "libinput Natural Scrolling Enabled" 1

また、私はLogitech Ultrathin Mouseを使用していますが、誰が何を知っているのか、マウスとキーボードの両方として接続しているため、xinput listに2回表示されます。したがって、出力をhead -1にパイピングして、最初のエントリ(この場合は常にマウス)に返されるものを制限します。

...
                    print substr($0, RSTART+3, RLENGTH-3)\
                 }' | head -1 \
     )
...
1
Jack Lenox