Bagaimana saya bisa menonaktifkan gerakan multitouch default yang sewenang-wenang di Unity?

22

Saya menggunakan pengaturan gestur multitouch Touchégg khusus di Ubuntu 11.04 dengan Magic Trackpad. Karena gerakan default (seperti ketuk 3-jari dan seret untuk memindahkan windows, ketuk 4 jari untuk mengungkapkan tanda hubung, dll.) Tampaknya hardcoded di Unity, saya tidak dapat menetapkan tindakan Touchégg kustom apa pun untuk mereka, dan beberapa default isyarat (yang saya tidak ingin banyak gunakan, jika sama sekali) kadang-kadang bercampur dengan yang saya tetapkan khusus dan mendapatkan dipicu oleh kecelakaan.

Apakah ada cara praktis (singkat men-tweak sumber uTouch) untuk menonaktifkan beberapa gerakan default? Jika tidak, arahkan ke bagian kode (mungkin dalam grail?) Di mana gerakan default didefinisikan, dan bantuan untuk tweaking juga akan dihargai.

senapan
sumber
1
Bisakah Anda menghapus utouch dan tetap menggunakan touchégg?
desgua
1
Touchégg menggunakan utouch-geis, jadi tidak, tidak dalam arti praktis yang jauh.
mgunes
Saya curiga Anda dapat mengkonfigurasi tindakan ini di /etc/ginn/wishes.xml (saya di ponsel, tidak dapat menguji sekarang)
desgua

Jawaban:

16

Pembaruan untuk jawaban domster untuk Ubuntu 12.10.

Kode sumber Unity jelas telah berubah, jadi inilah cara mencapai hal yang sama di Unity 6.8.0. Langkah-langkah untuk mengunduh kode sumber Unity sama seperti sebelumnya (Saya akan menyalin & menempelkan cuplikan 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

Pada titik ini, file yang akan diedit hanya /tmp/unity/unity-6.8.0/plugins/unityshell/src/unityshell.cpp.

Temukan metode UnityScreen::InitGesturesSupport()(baris 3368 untuk Unity 6.8.0).

Lalu, komentari semua baris yang dimulai dengan gesture_sub_launcher agar terlihat seperti:

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

Membangun kembali Unity mengikuti instruksi domster lagi:

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

Et voila lagi! Logout dan masuk kembali.

dgraziotin
sumber
bagaimana itu akan bekerja dalam kesatuan 7.2.1 saat ini?
Plopp
Jawaban ini masih 100% valid untuk Unity 7.2.2 (jadi saya anggap juga valid untuk 7.2.1). Saya sedang membangun sekarang, akan memperbarui apa yang terjadi kembali. touchegg setelah saya selesai dan reboot.
Endophage
1
Kadang antara Trusty dan Xenial, pengaturan untuk menonaktifkan gerakan Unity telah ditambahkan ke dconf, terdaftar di bawah com.canonical.unity.gestures. Jika mungkin juga tersedia di Wily, tapi saya rasa tidak; Saya hanya yakin bahwa itu tidak tersedia di Trusty, dan di Xenial.
Kevin
Ubuntu 16: dpkg-buildpackage -us -uc -nckeluar dengan kesalahan. 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

Ternyata tidak sulit untuk menambal unitypaket untuk benar-benar menonaktifkan penanganan multi-touch dan gestures. Berikut adalah petunjuk langkah demi langkah untuk menambal unity-4.24.0.

Di baris perintah, masukkan:

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

Pada titik ini, beri komentar 2 baris berikut dalam file /tmp/unity/unity-4.24.0/plugins/unityshell/src/unityshell.cpp:

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

dan 4 baris berikut dalam file /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));

Kode sumbernya ada C++, jadi mengomentari sebuah baris dilakukan dengan menambahkan //di awal baris. Misalnya, garis

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

menjadi

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

Kembali ke baris perintah, masukkan:

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

Et voila!

Sekarang jika Anda keluar dan masuk kembali, gerakan akan berfungsi secara normal. Ketuk tiga kali berfungsi pada sistem saya sebagai klik tengah secara default, tanpa perlu touchegg. Tetapi touchegg dan ginn kini berfungsi dengan baik untuk menentukan gerakan khusus untuk aplikasi Anda.

Domster
sumber
3

Untuk melakukan ini pada kesatuan terbaru (5.18.0) dalam 12.04 Anda harus memberi komentar pada baris kode yang sedikit berbeda.

Dalam plugin / 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));

Dalam plugin / unityshell / src / unityshell.cpp:

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

Percobaan kedua

dinegri menyarankan bahwa '[untuk] menonaktifkan tiga gerakan, perlu menginstal ccsm, [dan kemudian] menonaktifkan "Unit MT Grab Handles" juga dikenal sebagai "Loves Handles"' di sini .

Tapi itu meninggalkan kita dengan gerakan empat jari.

Percobaan pertama

File konfigurasi untuk utouch adalah /etc/ginn/wishes.xml. Jadi Anda dapat mengedit file ini dan menghapus (atau mengomentari) tindakan yang tidak Anda inginkan. Kemudian Touchégg akan melakukan tugasnya tanpa konflik.

Referensi

PS: Saya tidak bisa mereproduksi masalah Anda di sini untuk menguji solusinya. Saya minta maaf untuk itu.

desgua
sumber
Itu adalah file konfigurasi untuk ginn, yang merupakan injektor gerakan, yang fungsinya tumpang tindih dengan Touchégg. Modifikasi pada file konfigurasinya hanya akan berpengaruh jika daemon ginn berjalan, yang karena saya menggunakan Touchégg, biasanya tidak. Dengan kemungkinan menggunakan ginn alih-alih Touchégg, saya telah mencoba mengesampingkan beberapa gerakan Unity default dengan mengomentarinya di file konfigurasi ginn dan menjalankan ginn, tetapi itu tidak berhasil.
senapan
Saya sudah memperbarui jawabannya.
desgua
4
Menonaktifkan plugin handle hanya akan menghapus harga visual untuk diseret; itu bahkan tidak akan menonaktifkan ketukan tiga jari dan gerakan seret (yang saya terutama tidak ingin menonaktifkan), apalagi yang lain.
mgunes
Ngomong-ngomong, saya sudah menonaktifkannya, karena bug # 754000, saya perlu mensimulasikan klik tombol tengah dengan Touchégg, dan memiliki pegangan yang muncul setiap kali saya melakukan ketukan tiga jari sangat membingungkan.
mgunes
2

Nonaktifkan gerakan sentuh standar sebagai berikut:

sudo apt install dconf-editor
dconf-editor

Di menu sebelah kiri klik untuk

com > canonical > unity > gestures

dan nonaktifkan 3 gerakan dasar yang ditampilkan di sana. Ini bekerja pada 16.04.3.

alex
sumber
Sejauh ini jawaban terbaik dan paling mudah untuk 16,04 pengguna Ubuntu yang senang menginstal versi GUI dari dconf.
GrayedFox
1

Kami telah membangun terminal kios berbasis Ubuntu, tetapi gerakan multitouch mengungkapkan OS, jadi kami harus menyingkirkannya.

Itu adalah perangkat layar sentuh Samsung, xinputmengidentifikasi modul sentuh sebagai AFO TCM10J 40V.

Untuk menonaktifkan gerakan multitouch pada Ubuntu 14.04 metode ini pada dasarnya sama dengan domster yang dijelaskan di atas, kecuali Anda harus menemukan komentar pada baris berikut di /tmp/unity/unity-4.24.0/plugins/unityshell/src/Launcher.cpp

// InitGestureEngine();
ElvinAtombender
sumber
Hmm, ini sepertinya tidak berhasil untukku. touchegg dan ginn masih tidak melaporkan data apa pun untuk gerakan yang kurang dari 4 jari, dan pengaturan "Gulir Dua Jari" di pengaturan sistem touchpad masih lebih diutamakan ...
Jeff Ward
1

Perhatikan bahwa dpkg-buildpackage dapat diberikan sejumlah pekerjaan sebagai argumen, yang memungkinkan Anda untuk menggunakan semua core CPU Anda seperti ini:

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

(Ini seharusnya komentar untuk jawaban dgraziotin, tapi aku tidak bisa memposting komentar.)

Andrej Repiský
sumber
Banyak membantu. Terlalu lama untuk menunggu sampai selesai berulir tunggal.
Orient