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.

mgunes
fonte
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.

dgraziotina
fonte
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.

domster
fonte
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));
stefanix
fonte
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.

desgua
fonte
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.

alex
fonte
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();
ElvinAtombender
fonte
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.)

Andrej Repiský
fonte
Ajuda muito. É muito tempo para esperar até o acabamento com rosca simples.
Orient