Ubuntu 11.04でMagic Trackpadを使用して、カスタム Touchégg マルチタッチジェスチャセットアップを使用しています。デフォルトのジェスチャー(3本指でタップしてウィンドウを移動する、4本でタップしてダッシュを表示するなど)はUnityでハードコードされているように見えるため、カスタムTouchéggアクションを割り当てることはできません。ジェスチャ(私があまり使用しないつもりのジェスチャ)が、時折、私のカスタム割り当てのジェスチャと混同され、偶然にトリガーされます。
デフォルトのジェスチャの一部を無効にする実用的な方法(uTouchソースの調整以外)はありますか?そうでない場合は、デフォルトのジェスチャが定義されているコードの部分へのポインタ(おそらく杯ですか?)、および微調整の支援も高く評価されます。
Ubuntu 12.10の domster answer の更新.
Unityのソースコードは明らかに変更されているため、Unity 6.8.0で同じことを実現する方法を次に示します。 Unityのソースコードをダウンロードする手順は以前と同じです(domsterのスニペットをコピーして貼り付けます)。
Sudo apt-get build-dep unity
cd /tmp #It can be done somewhere else, feel free to change the base location.
mkdir unity
cd unity
apt-get source unity
この時点で、編集されるファイルは/tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp
のみです。
メソッドUnityScreen::InitGesturesSupport()
(Unity 6.8.0の3368行目)を見つけます。
次に、gesture_sub_launcherで始まるすべての行をコメント化して、次のようにします。
void UnityScreen::InitGesturesSupport()
{
std::unique_ptr<nux::GestureBroker> gesture_broker(new UnityGestureBroker);
wt->GetWindowCompositor().SetGestureBroker(std::move(gesture_broker));
/*
gestures_sub_launcher_.reset(new nux::GesturesSubscription);
gestures_sub_launcher_->SetGestureClasses(nux::DRAG_GESTURE);
gestures_sub_launcher_->SetNumTouches(4);
gestures_sub_launcher_->SetWindowId(GDK_ROOT_WINDOW());
gestures_sub_launcher_->Activate();
gestures_sub_dash_.reset(new nux::GesturesSubscription);
gestures_sub_dash_->SetGestureClasses(nux::TAP_GESTURE);
gestures_sub_dash_->SetNumTouches(4);
gestures_sub_dash_->SetWindowId(GDK_ROOT_WINDOW());
gestures_sub_dash_->Activate();
gestures_sub_windows_.reset(new nux::GesturesSubscription);
gestures_sub_windows_->SetGestureClasses(nux::TOUCH_GESTURE
| nux::DRAG_GESTURE
| nux::PINCH_GESTURE);
gestures_sub_windows_->SetNumTouches(3);
gestures_sub_windows_->SetWindowId(GDK_ROOT_WINDOW());
gestures_sub_windows_->Activate();
*/
}
Domsterの指示に従ってUnityを再構築します。
cd /tmp/unity/unity-6.8.0
dpkg-buildpackage -us -uc -nc
cd ..
Sudo dpkg -i *deb
出来上がり!ログアウトしてログインし直します。
マルチタッチとジェスチャの処理を完全に無効にするためにunity
パッケージにパッチを当てることはそれほど難しくないことがわかります。 unity-4.24.0
にパッチを適用するための手順をステップごとに説明します。
コマンドラインで、次のように入力します。
Sudo apt-get build-dep unity
cd /tmp #It can be done somewhere else, feel free to change the base location.
mkdir unity
cd unity
apt-get source unity
この時点で、ファイル/tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp
の次の2行をコメントアウトします。
GeisAdapter::Default()->Run();
gestureEngine = new GestureEngine(screen);
ファイル/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp
の次の4行:
GeisAdapter& adapter = *(GeisAdapter::Default());
adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart));
adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate));
adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish));
ソースコードはC++
にあるため、行のコメントは、行の先頭に//
を追加することによって行われます。たとえば、次の行
GeisAdapter::Default()->Run();
になる
//GeisAdapter::Default()->Run(); .
コマンドラインに戻り、次のように入力します。
cd unity-4.24.0
dpkg-buildpackage -us -uc -nc
cd ..
Sudo dpkg -i *deb
出来上がり!
ログアウトしてログインし直すと、ジェスチャーは正常に機能するようになりました。トリプルタップは、toucheggを必要とせずに、デフォルトでミドルクリックとしてシステム上で機能します。ただし、toucheggとginnは、アプリケーションのカスタムジェスチャを定義するのにうまく機能します。
12.04の最新の統一(5.18.0)でこれを行うには、わずかに異なるコード行をコメントアウトする必要があります。
Plugins/unityshell/src/Launcher.cppで:
// GeisAdapter& adapter = GeisAdapter::Instance();
// adapter.drag_start.connect(sigc::mem_fun(this, &Launcher::OnDragStart));
// adapter.drag_update.connect(sigc::mem_fun(this, &Launcher::OnDragUpdate));
// adapter.drag_finish.connect(sigc::mem_fun(this, &Launcher::OnDragFinish));
Plugins/unityshell/src/unityshell.cppで:
// geis_adapter_.Run();
// gesture_engine_.reset(new GestureEngine(screen));
次のように標準のタッチジェスチャを無効にします。
Sudo apt install dconf-editor
dconf-editor
左側のメニューでクリックして
com > canonical > unity > gestures
そこに表示されている3つの基本的なジェスチャーを無効にします。これは16.04.3で機能します。
Dpkg-buildpackageには引数として多数のジョブを指定できることに注意してください。これにより、次のようにすべてのCPUコアを使用できます。
dpkg-buildpackage -us -uc -nc -j$(($(nproc)))
(これはdgraziotinの答えに対するコメントであるはずでしたが、コメントを投稿することはできません。)
Ubuntuベースのキオスク端末を構築しましたが、マルチタッチジェスチャによりOSが明らかになったため、どうにかしてそれを取り除く必要がありました。
サムスンのタッチスクリーンデバイスであり、xinput
はタッチモジュールをAFO TCM10J 40Vとして識別しました。
Ubuntu 14.04でマルチタッチジェスチャを無効にする方法は、/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp
の次の行にコメントを見つける必要があることを除いて、基本的に上記のdomsterと同じです。
// InitGestureEngine();