Как я могу отключить произвольные жесты мультитач по умолчанию в Unity?
Я использую пользовательскую настройку жестов Touchégg Multitouch в Ubuntu 11.04 с Magic Trackpad. Так как жесты по умолчанию (такие как касание 3-мя пальцами и перетаскивание для перемещения окон, касание 4-мя пальцами, чтобы показать тире и т. Д.), По-видимому, жестко запрограммированы в Unity, я не могу назначить им какие-либо пользовательские действия Touchégg, а некоторые по умолчанию жесты (которые я не собираюсь использовать много, если вообще буду использовать) иногда смешиваются с моими аналогичными назначенными пользователем и запускаются случайно.
Есть ли практический способ (кроме настройки источника uTouch) отключить некоторые жесты по умолчанию? Если нет, указатели на части кода (возможно, в grail?), Где определены жесты по умолчанию, и помощь в настройке также приветствуются.
7 ответов
Обновление ответа 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
Эт вуаля снова! Выйдите из системы и войдите снова.
Оказывается, это не так сложно исправить 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 теперь хорошо работают для определения пользовательских жестов для ваших приложений.
Чтобы сделать это в последнем единстве (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));
Отключите стандартные сенсорные жесты следующим образом:
sudo apt install dconf-editor
dconf-editor
В левом меню нажмите на
com > canonical > unity > gestures
и отключите 3 основных жеста, показанных там. Это работает 16.04.3.
Вторая попытка
Динегри предполагает, что "чтобы отключить три жеста, необходимо [установить] ccsm, [а затем] отключить"Unit MT Grab Handles", также известные как"Loves Handles".
Но это оставляет нас с жестами четырьмя пальцами.
Первая попытка
Файл конфигурации для utouch /etc/ginn/wishes.xml
, Таким образом, вы можете редактировать этот файл и удалять (или комментировать) действия, которые вам не нужны. Тогда Touchégg сделает свою работу без конфликтов.
PS: я не смог воспроизвести вашу проблему здесь, чтобы проверить решение. Извини за это.
Обратите внимание, что dpkg-buildpackage может быть задано количество заданий в качестве аргумента, что позволяет вам использовать все ядра вашего процессора следующим образом:
dpkg-buildpackage -us -uc -nc -j$(($(nproc)))
(Это должен был быть комментарий к ответу дражиотина, но я не могу оставлять комментарии.)
Мы создали киоск-терминал на основе Ubuntu, но жесты мультитач раскрыли ОС, поэтому нам пришлось как-то избавиться от этого.
Это было устройство с сенсорным экраном Samsung, xinput
опознал сенсорный модуль как AFO TCM10J 40V.
Чтобы отключить жесты мультитач в Ubuntu 14.04, этот метод в основном такой же, как описанный выше domster, за исключением того, что вы должны найти комментарий в следующей строке в /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp
// InitGestureEngine();