Як я можу відключити довільні мультитач-жести за замовчуванням у Unity?


22

Я використовую власну налаштування мультитач жестів Touchégg в Ubuntu 11.04 з Magic Trackpad. Оскільки жести за замовчуванням (такі як натискання на три пальці та перетягування для переміщення вікон, 4 пальці для виявлення тире тощо), мабуть, жорстко кодуються в Unity, я не можу призначити їм будь-які власні дії Touchégg, а також деякі за замовчуванням жести (які я не збираюся багато використовувати, якщо взагалі) час від часу змішуються з моїми аналогічними призначеними на замовлення і спрацьовують випадково.

Чи є практичний спосіб (окрім налаштування джерела uTouch), щоб відключити деякі жести за замовчуванням? Якщо ні, то вказівки на частини коду (можливо, на граалі?), Де визначені жести за замовчуванням, і допомога в налаштуванні також буде оцінена.


1
Чи можете ви просто видалити utouch та зберегти touchégg?
десгуа

1
Touchégg використовує utouch-geis, так що ні, не в якомусь віддаленому практичному сенсі.
mgunes

Я підозрюю, що ви можете налаштувати ці дії в /etc/ginn/wishes.xml (я перебуваю на мобільному, зараз не можу перевірити)
desgua

Відповіді:


16

Оновлення відповіді на достер для Ubuntu 12.10.

Очевидно, що вихідний код Unity змінився, тому ось як досягти цього в Unity 6.8.0. Етапи завантаження вихідного коду Unity такі ж, як і раніше (я скопіюю та вставте фрагмент домстера):

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()(рядок 3368 для Unity 6.8.0).

Потім прокоментуйте всі рядки, починаючи з 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();
  */
}

Повторно будуйте Unity, дотримуючись вказівок Domster знову:

cd /tmp/unity/unity-6.8.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb

І знову вуаля! Вийдіть із системи та увійдіть знову.


як би це працювало в теперішній єдності 7.2.1?
plopp

Ця відповідь все ще на 100% справедлива для Unity 7.2.2 (тому я припускаю, що вона також дійсна для 7.2.1). Я будую зараз, буду оновлювати те, що відбувається повторно. touchegg, коли я закінчу і перезавантажуюсь.
Ендофаг

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

Et voila!

Тепер, якщо ви виходите з системи та знову входите в систему, жести повинні працювати нормально. Потрійний дотик працює в моїй системі як середній клік за замовчуванням, без необхідності touchegg. Але і Touchegg, і Ginn тепер добре працюють для визначення спеціальних жестів для ваших програм.


3

Для цього в останній єдності (5.18.0) 12.04 ви повинні прокоментувати трохи інші рядки коду.

У плагінах / юниshell / 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));

У плагінах / юниshell / src / Ujedinjeshell.cpp:

// geis_adapter_.Run();
// gesture_engine_.reset(new GestureEngine(screen));

2

Друга спроба

dinegri вважають , що «[т] про трьох жестах - інвалідів, то [це] необхідно [к] встановили CCSM, [а потім] відключити" Unit MT Поручні "також відомий як" любить "Бризговики» тут .

Але це залишає нас жестами з чотирма пальцями.

Спочатку спробуйте

Файл конфігурації для utouch є /etc/ginn/wishes.xml. Таким чином, ви можете редагувати цей файл і видаляти (або коментувати) дії, які вам не потрібні. Тоді Touchégg зробив би свою роботу без конфліктів.

Довідково

PS: Я не зміг відтворити вашу проблему тут, щоб перевірити рішення. Мені про це шкода.


Це файл конфігурації для ginn, який є інжектором жестів, функціональність якого збігається з функцією Touchégg. Зміни в його конфігураційному файлі матимуть силу лише в тому випадку, якщо працює демон демона Ginn, який, оскільки я використовую Touchégg, зазвичай не є. Маючи на увазі можливість використання ginn замість Touchégg, я намагався змінити деякі жести Unity за замовчуванням, коментуючи їх у файлі конфігурації ginn та запустивши ginn, але це не працює.
mgunes

Я оновив відповідь.
десгуа

4
Якщо вимкнути плагін ручки, вилучіть лише візуальне зображення для перетягування; він навіть не відключить три пальця натисканням та перетягуванням (чого я особливо не хочу відключати), не кажучи вже про інших.
mgunes

До речі, у мене його вже відключено, оскільки через помилку №754000 мені потрібно імітувати клацання середньої кнопки за допомогою Touchégg, і те, що ручки з’являються кожного разу, коли я виконую натискання трьома пальцями, дуже дезорієнтує.
mgunes

2

Вимкніть стандартні жести дотику таким чином:

sudo apt install dconf-editor
dconf-editor

У меню ліворуч натисніть на

com > canonical > unity > gestures

і відключити 3 основні жести, показані там. Це працює 16.04.3.


На сьогодні найкраща і найпростіша відповідь для користувачів 16.04 Ubuntu, які із задоволенням встановили GUI-версію dconf.
GrayedFox

1

Ми побудували кіоск-термінал на базі Ubuntu, але мультитач жестів виявив ОС, тому нам довелося якось позбутися цього.

Це був сенсорний пристрій Samsung, xinputсенсорний модуль ідентифікував як AFO TCM10J 40V.

Для відключення мультитач-жестів на Ubuntu 14.04 метод в основному такий же, як описаний вище domster, за винятком того, що ви повинні знайти коментар у наступному рядку в /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

Гм, це, здається, не працює для мене. Touchegg і Ginn досі не повідомляють жодних даних для жестів менше 4 пальців, а настройка "Прокручування двома пальцями" в налаштуваннях тачпада системи все ще має перевагу ...
Jeff Ward,

1

Зауважте, що dpkg-buildpackage може бути задано кількістю завдань як аргумент, що дозволяє використовувати всі ваші CPU ядра таким чином:

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

(Це повинно бути коментарем до відповіді dgraziotin, але я не можу публікувати коментарі.)


Дуже допомагає. Зачекати, поки одна різьба закінчить.
Орієнт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.