Как я могу отключить произвольные жесты мультитач по умолчанию в Unity?

22

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

Есть ли практический способ (кроме настройки источника uTouch) отключить некоторые жесты по умолчанию? Если нет, указатели на части кода (возможно, в grail?), Где определены жесты по умолчанию, и помощь в настройке также приветствуются.

mgunes
источник
1
Можете ли вы просто удалить utouch и сохранить touchégg?
Desgua
1
Touchégg использует utouch-geis, так что нет, ни в каком отдаленном практическом смысле.
mgunes
Я подозреваю, что вы можете настроить эти действия в /etc/ginn/wishes.xml (я на мобильном, сейчас не могу тестировать)
desgua

Ответы:

16

Обновление ответа domster для 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).

Затем закомментируйте все строки, начинающиеся с gest_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, следуя инструкциям Домстера:

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

Эт вуаля снова! Выйдите из системы и войдите снова.

dgraziotin
источник
как это будет работать в текущем единстве 7.2.1?
plopp
Этот ответ все еще на 100% действителен для Unity 7.2.2 (поэтому я предполагаю, что он также действителен для 7.2.1). Я строю прямо сейчас, буду в курсе того, что происходит повторно. touchegg, как только я закончу и перезагрузлю.
Эндофаг
1
В промежутке между Trusty и Xenial в dconf были добавлены настройки для отключения жестов Unity, перечисленные ниже 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, и ginn теперь хорошо работают для определения пользовательских жестов для ваших приложений.

domster
источник
3

Чтобы сделать это в последнем единстве (5.18.0) в 12.04, вы должны закомментировать несколько разные строки кода.

В плагинах / 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));

В плагинах / unityshell / src / unityshell.cpp:

// geis_adapter_.Run();
// gesture_engine_.reset(new GestureEngine(screen));
stefanix
источник
2

Вторая попытка

dinegri полагают , что «[т] о трех жестах - инвалидов, то [это] необходимо [к] установили CCSM, [а затем] отключить„Unit MT Поручни“также известен как„любит“Брызговики» здесь .

Но это оставляет нас с жестами четырьмя пальцами.

Первая попытка

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

Ссылка

PS: я не смог воспроизвести вашу проблему здесь, чтобы проверить решение. Извини за это.

desgua
источник
Это файл конфигурации для ginn, инжектора жестов, функциональность которого совпадает с функциональностью Touchégg. Изменения в его конфигурационном файле будут иметь эффект только в том случае, если запущен демон ginn, что, поскольку я использую Touchégg, обычно не работает. Имея в виду возможность использования ginn вместо Touchégg, я попытался переопределить некоторые жесты Unity по умолчанию, закомментировав их в файле конфигурации ginn и запустив ginn, но это не работает.
mgunes
Я обновил ответ.
Desgua
4
Отключение плагина handles приведет к удалению только визуальной возможности перетаскивания; он даже не отключит жест касанием и перетаскиванием тремя пальцами (которое я в любом случае не хочу отключать), не говоря уже о других.
mgunes
Кстати, я уже отключил его, поскольку из-за ошибки # 754000 мне нужно смоделировать нажатие средней кнопки с помощью Touchégg, и когда ручки появляются каждый раз, когда я выполняю касание тремя пальцами, очень дезориентирует.
mgunes
2

Отключите стандартные сенсорные жесты следующим образом:

sudo apt install dconf-editor
dconf-editor

В левом меню нажмите на

com > canonical > unity > gestures

и отключите 3 основных жеста, показанных там. Это работает 16.04.3.

Алекс
источник
Безусловно лучший и самый простой ответ для 16.04 пользователей Ubuntu, которые рады установить версию 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();
ElvinAtombender
источник
Хм, это не похоже на работу для меня. Тучегг и Джинн до сих пор не сообщают никаких данных для жестов менее 4-х пальцев, а настройка «Прокрутка двумя пальцами» в настройках системной сенсорной панели по-прежнему имеет приоритет ...
Джефф Уорд
1

Обратите внимание, что dpkg-buildpackage может быть задано количество заданий в качестве аргумента, что позволяет вам использовать все ядра вашего процессора следующим образом:

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

(Это должен был быть комментарий к ответу дражиотина, но я не могу оставлять комментарии.)

Андрей Реписьки
источник
Много помогает Слишком долго ждать, пока закончится однопоточная обработка.
Ориент