Como posso desativar gestos multitoque padrão arbitrários no Unity?


22

Estou usando uma configuração personalizada de gestos multitoque Touchégg no Ubuntu 11.04 com um Magic Trackpad. Como os gestos padrão (como toque com três dedos e arraste para mover janelas, toque com quatro dedos para revelar o traço etc.) aparentemente são codificados no Unity, não consigo atribuir nenhuma ação Touchégg personalizada a eles e alguns padrões gestos (que eu não pretendo usar muito, se é que faço) ocasionalmente se misturam com os meus designados semelhantes e são acionados por acidente.

Existe uma maneira prática (menos ajustar a fonte do uTouch) para desativar alguns dos gestos padrão? Caso contrário, os ponteiros para partes do código (talvez no graal?) Onde os gestos padrão são definidos e a ajuda com os ajustes também serão apreciados.


1
Você pode simplesmente desinstalar o utouch e manter o touchégg?
Des

1
A Touchégg utiliza utouch-geis, portanto não, em nenhum sentido remotamente prático.
mgunes 23/08

Eu suspeito que você pode configurar essas ações em /etc/ginn/wishes.xml (estou no celular, não pode testar agora)
desgua

Respostas:


16

Uma atualização para a resposta do domster para o Ubuntu 12.10.

O código fonte do Unity obviamente mudou, então aqui está como conseguir o mesmo no Unity 6.8.0. As etapas para fazer o download do código-fonte do Unity são as mesmas de antes (copio e colo o trecho do 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

Neste ponto, o arquivo a ser editado é apenas /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Encontre o método UnityScreen::InitGesturesSupport()(linha 3368 para Unity 6.8.0).

Em seguida, comente todas as linhas que começam com Gestor_sub_launcher para parecer:

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();
  */
}

Reconstrua o Unity seguindo as instruções do domster novamente:

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

Et voila novamente! Saia e faça login novamente.


como isso funcionaria na unidade atual 7.2.1?
Plopp

Essa resposta ainda é 100% válida para o Unity 7.2.2 (então, suponho que também seja válido para 7.2.1). Estou construindo agora, vai atualizar sobre o que acontece re. touchegg quando terminar e reiniciado.
Endophage

1
Em algum momento entre Trusty e Xenial, as configurações para desativar os gestos do Unity foram adicionadas ao dconf, listadas em com.canonical.unity.gestures. Se também pode estar disponível no Wily, mas acho que não; Só tenho certeza de que ele não está disponível no Trusty e está no Xenial.
Kevin

Ubuntu 16: dpkg-buildpackage -us -uc -ncsai com erros. 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
Matt

11

Acontece que não é tão difícil corrigir o unitypacote para desabilitar totalmente o manuseio de vários toques e gestos. Aqui estão as instruções passo a passo para aplicar patches unity-4.24.0.

Em uma linha de comandos, digite:

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

Nesse momento, comente as 2 linhas a seguir no arquivo /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

e as 4 linhas a seguir no arquivo /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));

Como o código-fonte está C++inserido, o comentário de uma linha é feito adicionando //no início da linha. Por exemplo, a linha

GeisAdapter::Default()->Run();

torna-se

//GeisAdapter::Default()->Run(); .

De volta à linha de comandos, digite:

cd unity-4.24.0
dpkg-buildpackage -us -uc -nc
cd ..
sudo dpkg -i *deb

Et voila!

Agora, se você sair e entrar novamente, os gestos deverão funcionar normalmente. O toque triplo funciona no meu sistema como um clique do meio, por padrão, sem a necessidade de tocar. Agora, tanto o touchegg quanto o ginn funcionam bem para definir gestos personalizados para seus aplicativos.


3

Para fazer isso na última unidade (5.18.0) da versão 12.04, é necessário comentar as linhas de código ligeiramente diferentes.

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

Em plugins / unityshell / src / unityshell.cpp:

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

2

Segunda tentativa

dinegri sugere que 'para desabilitar três gestos, é necessário [ter] instalado o ccsm, [e] desabilitar "Unit MT Grab Handles", também conhecidos como "Loves Handles"' aqui .

Mas nos deixa com os gestos dos quatro dedos ainda.

Primeira tentativa

O arquivo de configuração para utouch é /etc/ginn/wishes.xml. Assim, você pode editar este arquivo e remover (ou comentar) as ações que você não deseja. Então Touchégg faria seu trabalho sem conflitos.

Referência

PS: Não consegui reproduzir o seu problema aqui para testar a solução. Eu sinto por isso.


Esse é o arquivo de configuração do ginn, que é um injetor de gestos, cuja funcionalidade se sobrepõe à do Touchégg. Modificações no arquivo de configuração só terão efeito se o daemon ginn estiver em execução, o que, como estou usando o Touchégg, normalmente não está. Com a possibilidade de usar o ginn em vez do Touchégg, tentei substituir alguns gestos padrão do Unity comentando-os no arquivo de configuração do ginn e executando o ginn, mas isso não funciona.
mgunes

Eu atualizei a resposta.
Des

4
Desativar o plug-in de alças remove apenas a capacidade visual de arrastar; ele nem sequer desabilita o toque de três dedos e arrasta o gesto (que eu particularmente não quero desabilitar de qualquer maneira), muito menos os outros.
mgunes

A propósito, eu já o tenho desativado, pois devido ao bug # 754000, preciso simular o clique do botão do meio com o Touchégg, e ter as alças sempre que executo um toque de três dedos é muito desorientador.
mgunes

2

Desative os gestos de toque padrão da seguinte maneira:

sudo apt install dconf-editor
dconf-editor

Nos menus à esquerda, clique para

com > canonical > unity > gestures

e desative os três gestos básicos mostrados lá. Isso funciona em 16.04.3.


De longe, a melhor e mais direta resposta para os usuários do Ubuntu 16.04 que estão felizes em instalar uma versão GUI do dconf.
GrayedFox

1

Criamos um terminal de quiosque baseado no Ubuntu, mas os gestos multitoque revelaram o sistema operacional, então tivemos que nos livrar disso de alguma forma.

Era um dispositivo touchscreen da Samsung, xinputidentificou o módulo de toque como AFO TCM10J 40V.

Para desativar gestos multitoque no Ubuntu 14.04, o método é basicamente o mesmo que o domster descrito acima, exceto que você precisa encontrar um comentário na seguinte linha em /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();

Hmm, isso não parece funcionar para mim. touchegg e ginn ainda não relatar quaisquer dados para gestos menos de 4 dedos, e os "dois dedos de rolagem" configuração nas configurações do touchpad sistema ainda tem precedência ...
Jeff Ward

1

Observe que o dpkg-buildpackage pode receber um número de tarefas como argumento, o que permite que você use todos os seus núcleos de CPU como este:

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

(Isso deveria ter sido um comentário à resposta de dgraziotin, mas não posso postar comentários.)


Ajuda muito. É muito tempo para esperar até o acabamento com rosca simples.
Orient
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.