Ringkasan pertanyaan: Saya ingin salah satu tombol tetikus saya didaftarkan sebagai tombol Windows kiri Super_Loleh X11.
Di window manager saya, saya dapat memindahkan windows dengan menahan "tombol kiri Windows" (Kiri Super) dan menyeret jendela dengan tombol kiri mouse. Saya ingin dapat melakukannya tanpa menyentuh keyboard, jadi saya ingin memetakan tombol Super kiri ke tombol mouse 11, dengan cara itu saya bisa menahan tombol mouse 11 dan klik + drag windows.
Solusi yang paling jelas adalah menggunakan xbindkeys dan xte seperti ini ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Ini berfungsi seperti ini:
- Ketika saya menekan tombol mouse 11, Super_Ljuga ditekan
- Ketika saya melepaskan tombol mouse 11, Super_Ljuga dirilis
Tapi ada masalah: Saya tidak bisa memindahkan windows menggunakan Super_L+ Mouse1jika saya juga menekan tombol mouse lain, seperti tombol Mouse 11. Menggunakan solusi di atas, tombol mouse 11 masih terdaftar sebagai ditekan dan dilepaskan, jadi tidak ada operasi manajer jendela bekerja.
Saya telah mencoba ini menggunakan kedua Cinnamon dan mengagumkan WM, dan benar-benar tidak ada yang Super_Lkombinasi keyboard pekerjaan sementara tombol mouse 10 atau 11 sedang ditekan.
Peretasan di bawah standar
Saat ini saya sedang mengatasi masalah ini dengan menyebabkan klik mouse untuk menahan Super_Ltombol untuk jangka waktu tertentu. Dengan begitu saya bisa mengklik tombol mouse, lalu seret barang-barang untuk waktu yang singkat sesudahnya:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Upaya lain
Seperti yang disarankan oleh totti, saya mencoba xbindkeys
konfigurasi ini :
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
Itu tidak bekerja. Tampaknya Super_Ltombol sedang ditekan, karena segera setelah saya melepaskan tombol 10 itu tetap ditekan selama-lamanya (sampai saya menekan Super_Ltombol lagi pada keyboard) tetapi tombol mouse masih terdaftar, karena saya tidak dapat mengklik & seret windows . Saya tidak berpikir saya akan dapat membuat pekerjaan ini menggunakan xbindkeys
dan xte
.
Jawaban:
Posting askubuntu berisi jawaban yang akan saya ringkas di bawah ini.
Masalahnya adalah bahwa xbindkeys mengambil seluruh mouse, membuat pengubah + pemetaan klik mouse menjadi tidak pasti. Jawabannya menggunakan uinput melalui skrip python-uinput untuk memantau
/dev/my-mouse
klik tombol ibu jari dan mengirim Ctrlkunci ke keyboard virtual. Berikut langkah-langkah terperinci:1. Buat aturan udev
Untuk mouse, file
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev akan mencari perangkat kernel dengan nama seperti event5. SYMLINK adalah untuk menemukan mouse masuk
/dev/my_mx_mouse
, dapat dibaca oleh grupmxgrabber
.Untuk menemukan informasi perangkat keras, jalankan sesuatu seperti:
Untuk uinput, ajukan
/etc/udev/rules.d/94-mxkey.rules
:Cabut dan pasang mouse Anda, atau paksa udev untuk memicu aturan
udevadm trigger
.2. Aktifkan Modul UINPUT
Dan di
/etc/modules-load.d/uinput.conf
:3. Buat grup baru
4. Skrip python
Pasang
python-uinput library
danpython-evdev library
.Skrip di bawah ini memerlukan pengidentifikasian kode event.code tombol:
5. Finishing
Buat file python dieksekusi dan pastikan itu dimuat saat startup.
sumber
F13
,F14
danF15
, dan menonaktifkan fungsi mouse menggunakanxinput
. Kemudian saya dapat dengan mudah menetapkan kembali kunci-kunci itu untuk apa pun yang saya butuhkan menggunakan sederhanaxmodmap
. Gagasan utama dirancang di intisari (ada beberapa nilai hardcoded dan saya tidak mengembalikanxinput
fungsi mouse setelah itu), saya akan membuat posting blog tentang ini dengan versi final dari skrip (dan berbagi tautan di sini ketika akan dilakukan. Terima kasih kasih atas bantuan Anda! ☺ ♥Karena Anda dapat menjalankan skrip pada klik mouse, Anda dapat menggunakan trik berikut.
1. Tekan Tombol 11 untuk menahan tombol super . ( Tombol 11 memicu skrip)
2. Memindahkan windows menggunakan tombol mouse lainnya
3. Tekan tombol mouse 11 lagi untuk melepaskan tombol super
script
Gunakan
xdotool
untuk menahan tombol superPada klik Tombol pertama, buat file temp dan tahan tombol. Pada klik selanjutnya hapus file tmp dan lepaskan kunci,
memperbarui
Menurut halaman bantuan ubuntu (banyak tombol mouse cara)
imwheel
dapat memetakan kembali ke tombol.sumber
+ Mod4
konfigurasi xbindkeys saya ke akun untuk tombol super ditekan. Solusi yang Anda sarankan lebih baik daripada saya, dan saya beralih ke itu :-) Tapi itu masih tidak menjawab pertanyaan.Saran debug: Saya akan mencoba memonitor
/dev/input/eventX
file untuk melihat peristiwa apa yang dihasilkan ketika Anda menekan dan melepaskan tombol itu, terutama dalam kombinasi denganBTN_LEFT
. Berikut adalah contoh kode untuk membantu Anda memulai. Anda jelas harus memodifikasinya untuk mencatat semua peristiwa, tidak hanya penekanan tombol.Anda mungkin juga ingin memeriksa
xev
output, jika Anda belum melakukannya. Menganalisis kedua log harus mengungkapkan masalah yang Anda alami.Kemungkinannya adalah mouse Anda menghasilkan acara pelepasan tombol tambahan saat beberapa tombol ditekan. Dalam hal ini, opsi Anda akan menggunakan solusi pengikatan kunci, atau memodifikasi
xf86-input-evdev
perpustakaan untuk memfilter acara yang tidak diinginkan (atau mensimulasikan yang hilang). Saya melakukan sesuatu yang serupa beberapa waktu lalu untuk layar sentuh yang menghasilkan acara "klik" ketika mencoba untuk menarik & melepas. Idenya adalah untuk menyaring peristiwa "rilis" yang datang hampir bersamaan (dalam jendela waktu kecil) dengan peristiwa "klik". Jika tebakan saya benar, Anda pada dasarnya perlu menerapkan sesuatu yang serupa.sumber
Saya menemukan ini sebelumnya hari ini dengan kunci pengubah lainnya. Masalahnya adalah Anda harus menyertakan pengubah dalam kombinasi tombol untuk rilis. Dengan asumsi kunci Super Anda dipetakan ke Mod4 (yang seharusnya menjadi default, afaik):
EDIT: Baru menyadari bahwa ini tidak sepenuhnya menjawab pertanyaan Anda karena Anda masih tidak dapat menggunakan LMB sambil menahan b: 11
sumber