Unity에서 임의의 기본 멀티 터치 제스처를 비활성화하려면 어떻게해야합니까?


22

Magic Trackpad와 함께 Ubuntu 11.04 의 사용자 정의 Touchégg 멀티 터치 제스처 설정을 사용하고 있습니다. 기본 동작 (예 : 3 손가락 탭 및 드래그하여 창 이동, 4 손가락 탭으로 대시 표시 등)이 Unity에서 하드 코딩되어 있으므로 사용자 지정 Touchégg 동작을 할당 할 수 없습니다. 제스처 (내가 많이 사용하지 않을 경우)는 종종 유사한 사용자 지정 제스처와 혼합되어 우연히 트리거됩니다.

기본 동작 중 일부를 비활성화하는 실용적인 방법이 있습니까 (uTouch 소스 조정이 부족한가)? 그렇지 않은 경우 기본 제스처가 정의 된 코드 부분 (아마도 grail?)에 대한 포인터 및 조정에 대한 도움을받을 수 있습니다.


1
utouch를 제거하고 touchégg를 유지할 수 있습니까?
desgua

1
Touchégg는 utouch-geis를 사용하므로 원격으로 실용적이지 않습니다.
mgunes

/etc/ginn/wishes.xml에서 이러한 작업을 구성 할 수 있다고 생각합니다 (모바일 상태이며 지금 테스트 할 수 없음)
desgua

답변:


16

우분투 12.10의 domster answer 업데이트 .

Unity 소스 코드가 분명히 변경되었으므로 Unity 6.8.0에서 동일하게 달성하는 방법은 다음과 같습니다. Unity 소스 코드를 다운로드하는 단계는 이전과 동일합니다 (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

이 시점에서 편집 할 파일은 오직 /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp입니다.

방법을 찾으십시오 UnityScreen::InitGesturesSupport()(Unity 6.8.0의 경우 3368 행).

그런 다음 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();
  */
}

domster의 지시에 따라 Unity를 다시 빌드하십시오.

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

다시 짜잔! 로그 아웃했다가 다시 로그인하십시오.


현재 통일성 7.2.1에서 어떻게 작동합니까?
plopp

이 답변은 여전히 ​​Unity 7.2.2에서 100 % 유효합니다 (따라서 7.2.1에서도 유효하다고 가정합니다). 나는 지금 구축 중이며 다시 발생하는 일에 대해 업데이트 할 것입니다. 완료되고 재부팅되면 touchegg.
Endophage

1
Trusty와 Xenial간에 언젠가 Unity 제스처를 비활성화하는 설정이 아래에 나열된 dconf에 추가되었습니다 com.canonical.unity.gestures. Wily에서도 사용할 수 있지만 그렇게 생각하지 않습니다. Trusty에서는 사용할 수 없으며 Xenial에서는 긍정적입니다.
케빈

우분투 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

이 시점에서 파일에서 다음 두 줄을 주석 처리하십시오 /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은 이제 응용 프로그램에 대한 사용자 정의 제스처를 정의하는 데 효과적입니다.


3

12.04의 최신 유니티 (5.18.0)에서이 작업을 수행하려면 약간 다른 코드 행을 주석 처리해야합니다.

플러그인 /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));

2

두 번째 시도

dinegri 은 '세 개의 제스처를 비활성화하지 않으면 CCSM 을 설치 한 다음 "Unit MT Grab Handles"를 비활성화하고 "Loves Handles"라고도 합니다 .

그러나 아직 네 손가락 제스처로 우리를 떠납니다.

첫 시도

utouch의 구성 파일은 /etc/ginn/wishes.xml입니다. 따라서이 파일을 편집하고 원하지 않는 동작을 제거 (또는 주석) 할 수 있습니다. 그러면 Touchégg는 충돌없이 업무를 수행 할 것입니다.

참고

추신 : 여기에서 솔루션을 테스트하기 위해 문제를 재현 할 수 없었습니다. 유감 이군.


이것이 ginn의 구성 파일입니다. 이것은 몸짓 인젝터이며, 그 기능은 Touchégg의 기능과 겹칩니다. 구성 파일의 수정은 ginn 데몬이 실행중인 경우에만 적용됩니다. Touchégg를 사용하고 있기 때문에 일반적으로 그렇지 않습니다. Touchégg 대신 ginn을 사용할 가능성을 염두에두고 ginn 구성 파일에서 주석을 달고 ginn을 실행하여 기본 Unity 제스처를 재정의하려고 시도했지만 작동하지 않습니다.
mgunes

답변을 업데이트했습니다.
desgua

4
핸들 플러그인을 비활성화하면 드래그에 대한 시각적 여유 만 제거됩니다. 다른 세 손가락은 물론 세 손가락 탭 및 드래그 제스처 (특히 비활성화하지 않으려는)를 비활성화하지 않습니다.
mgunes

그건 그렇고, 버그 # 754000으로 인해 Touchégg로 중간 버튼 클릭을 시뮬레이트해야하며 세 손가락 탭을 수행 할 때마다 핸들이 나타나는 것은 매우 혼란 스럽기 때문에 이미 비활성화되어 있습니다.
mgunes

2

다음과 같이 표준 터치 제스처를 비활성화하십시오.

sudo apt install dconf-editor
dconf-editor

왼쪽 메뉴에서

com > canonical > unity > gestures

거기에 표시된 3 가지 기본 동작을 비활성화합니다. 이것은 16.04.3에서 작동합니다.


dconf의 GUI 버전을 설치하고 싶은 16.04 Ubuntu 사용자를위한 최고의 답변입니다.
GrayedFox

1

우분투 기반의 키오스크 터미널을 만들었지 만 멀티 터치 제스처로 OS가 공개되었으므로 어떻게 든 제거해야했습니다.

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의 답변에 대한 의견이어야하지만 의견을 게시 할 수는 없습니다.)


많은 도움이됩니다. 단일 나사산이 완성 될 때까지 기다리는 시간이 너무 깁니다.
오리엔트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.