Unityで任意のデフォルトのマルチタッチジェスチャを無効にするにはどうすればよいですか?


22

Ubuntu 11.04のMagic TrackpadでカスタムTouchéggマルチタッチジェスチャセットアップを使用しています。デフォルトのジェスチャー(3本指でタップしてウィンドウを移動する、4本指でタップしてダッシュを表示するなど)は明らかにUnityでハードコーディングされているため、カスタムTouchéggアクションを割り当てることはできません。ジェスチャ(私があまり使用しないつもりのジェスチャ)は、時折、私のカスタム割り当てのジェスチャと混同し、偶然にトリガーされます。

デフォルトのジェスチャの一部を無効にする実用的な方法(uTouchソースの調整以外)はありますか?そうでない場合は、デフォルトのジェスチャが定義されているコードの部分へのポインタ(おそらく杯ですか?)、および微調整の支援も高く評価されます。


1
utouchをアンインストールしてtouchéggを保持することはできますか?
デスグア

1
Touchéggはutouch-geisを使用しているため、実際にはそうではありません。
mgunes

/etc/ginn/wishes.xmlでこれらのアクションを設定できると思います(私はモバイルにいるので、今はテストできません)
desgua

回答:


16

Ubuntu 12.10のdomster回答の更新。

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 7.2.1ではどのように機能しますか?
プロップ14年

この回答は、Unity 7.2.2でも引き続き100%有効です(したがって、7.2.1でも有効であると想定しています)。私は今構築中です、何が起こるかを更新します。完了して再起動したら、touchegg。
エンドファージ14

1
TrustyとXenialの間で、Unityジェスチャを無効にする設定がdconfに追加されましたcom.canonical.unity.gestures。Wilyでも利用できるかもしれませんが、私はそうは思いません。Trustyでは使用できず、Xenialでも使用できることを確信しています。
ケビン

Ubuntu 16:dpkg-buildpackage -us -uc -ncエラーで終了します。error: debian/rules build gave error exit status 2... The X server was not able to run in time ....recipe for target 'tests/CMakeFiles/run-test-switcher-controller-slow-headless' failed
マット

11

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

この時点で、ファイル内の次の2行をコメント化します /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp

GeisAdapter::Default()->Run();
gestureEngine = new GestureEngine(screen);

ファイル内の次の4行/tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

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は、アプリケーションのカスタムジェスチャを定義するのにうまく機能します。


3

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));

2

二回目

dinegriは、「[t] o 3つのジェスチャを無効にします。ccsmをインストールする必要があります。次に[Unit MT Grab Handles]を無効にします。これは「Loves Handles」とも呼ばれます」。

しかし、4本の指のジェスチャーはまだ残っています。

初挑戦

utouchの構成ファイルは/etc/ginn/wishes.xmlです。したがって、このファイルを編集して、不要なアクションを削除(またはコメント)できます。その後、Touchéggは競合することなく仕事をします。

参照

PS:ソリューションをテストするためにここで問題を再現できませんでした。ごめんなさい


これがGinnの構成ファイルです。これはジェスチャーインジェクターであり、その機能はTouchéggの機能と重複しています。構成ファイルの変更は、ginnデーモンが実行されている場合にのみ効果があります。Touchéggを使用しているため、通常は実行されません。Touchéggの代わりにginnを使用する可能性を念頭に置いて、ginn構成ファイルでコメントアウトしてginnを実行することにより、デフォルトのUnityジェスチャーをオーバーライドしようとしましたが、うまくいきません。
mgunes

答えを更新しました。
デスグア

4
handlesプラグインを無効にすると、ドラッグの視覚的アフォーダンスのみが削除されます。3本の指でタップしてドラッグするジェスチャーも無効にしません(特に無効にするつもりはありません)。
mgunes

ちなみに、バグ#754000によりTouchéggで中ボタンのクリックをシミュレートする必要があり、3本指でタップするたびにハンドルが表示されるのは非常に混乱させるため、既に無効にしています。
mgunes

2

次のように標準のタッチジェスチャを無効にします。

sudo apt install dconf-editor
dconf-editor

左側のメニューでクリックして

com > canonical > unity > gestures

そこに表示されている3つの基本的なジェスチャーを無効にします。これは16.04.3で機能します。


dconfのGUIバージョンをインストールするのがうれしい16.04 Ubuntuユーザーにとって、これまでで最高かつ最も簡単な答えです。
GrayedFox

1

Ubuntuベースのキオスク端末を構築しましたが、マルチタッチジェスチャによりOSが明らかになったため、どうにかしてそれを取り除く必要がありました。

サムスンのタッチスクリーンデバイスでxinput、タッチモジュールはAFO TCM10J 40Vとして識別されました。

Ubuntu 14.04でマルチタッチジェスチャを無効にする方法は、上記のdomsterと基本的に同じですが、次の行にコメントを見つける必要があります。 /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

うーん、これは私にはうまくいかないようでした。toucheggとギンまだ4本の指よりも少ないジェスチャーのための任意のデータを報告していない、とシステムのタッチパッドの設定で設定「二つの指スクロールは」まだ...優先されます
ジェフ・ワード

1

dpkg-buildpackageには引数として多数のジョブを指定できることに注意してください。これにより、次のようにすべてのCPUコアを使用できます。

dpkg-buildpackage -us -uc -nc -j$(($(nproc)))

(これはdgraziotinの答えに対するコメントであるはずでしたが、コメントを投稿することはできません。)


大いに役立ちます。シングルスレッドのmakeが終了するまで待つのは長すぎます。
オリエント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.