Pertanyaan ini sudah ditanyakan tetapi tidak pernah dijawab dengan benar. Setelah izin dengan @Seth saya sekarang bertanya lagi. Ini akan memungkinkan saya untuk merespons dan mungkin memodifikasi pertanyaan lebih mudah. Pertanyaan asli dapat ditemukan di sini:
Peta Ctrl dan Alt untuk tombol ibu jari mouse
Isu:
Meskipun sangat sederhana untuk memetakan penekanan tombol apa pun ke tombol mouse yang digunakan xbindkeys
bersama dengan xdotool
atau xte
tampaknya jauh lebih bermasalah untuk memetakan kunci pengubah (misalnya ALT , CTRL , SHIFT dll) untuk itu.
Soloution terakhir harus memungkinkan ia klik CTRL + (misalnya untuk memilih beberapa entri dari daftar) hanya dengan mouse.
Beberapa pendekatan yang mungkin untuk menyelesaikan masalah ini dapat ditemukan di sini di Stack Exchange dan juga di forum terkait Linux lainnya. Tetapi tidak satu pun dari mereka yang berfungsi seperti yang diharapkan karena mengarah pada masalah lain dan efek samping.
Catatan:
Beberapa contoh di bawah ini melibatkan Guile dengan sintaks Skema dan bergantung pada .xbindkeysrc.scm
file sedangkan yang lain bergantung pada .xbindkeysrc
file dengan sintaks masing-masing. Saya sadar mereka tidak akan bekerja sama.
Selain itu, cuplikan di bawah ini xdotool
hanya mengandalkan pada tetapi saya terbuka untuk pendekatan yang melibatkan aplikasi lain seperti misalnya xte
- meskipun tampaknya keduanya mengarah pada hasil yang sama dan karena itu saya menggunakan xdotool
tindakan yang adil di sini.
Pendekatan a:
Memperbarui .xbindkeysrc
file dengan:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Itulah yang awalnya saya coba tetapi memiliki efek samping bahwa pengubah ditahan dan tidak dapat dirilis.
Pendekatan B:
Memperbarui .xbindkeysrc.scm
file dengan:
(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")
(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")
Ditemukan di http://www.linuxforums.org/forum/hardware-peripherals/169773-solved-map-mouse-button-modifier-key.html dan mencoba untuk mengatasi masalah di mana pengubah ditahan (seperti dijelaskan pada pendekatan Sebuah).
Meskipun itu diperbaiki bahwa itu hanya berfungsi sebagian karena tidak mungkin untuk melakukan klik mouse lainnya saat tombol ibu jari ditekan.
Pendekatan C:
Memperbarui .xbindkeysrc
file dengan:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Dicoba oleh OP dari pertanyaan terkait di sini di askubuntu. Jauh lebih sederhana dan lebih solid karena tidak melibatkan negara pengubah. Namun demikian masalahnya tetap ada, yaitu klik CTRL + tidak dimungkinkan.
Tampaknya itu xbindkeys
sendiri adalah masalah di sini karena mengenali klik tetapi tidak akan menjalankannya. Ini dapat diuji menggunakan xev | grep button
dan xbindkeys -v
:
Klik mouse normal sebagaimana dicatat oleh xev
akan terlihat seperti:
state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES
Serta untuk tombol ibu jari:
state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES
Tetapi ketika memiliki xbindkeys
konfigurasi di atas diaktifkan itu tidak merekam apa pun. Meskipun masuk akal untuk tombol jempol karena dipetakan ke CTRL dan karena itu bukan tombol mouse lagi aneh bahwa tombol 1 tidak direkam juga. Ini mungkin karena xbindkeys
tidak menjalankannya tetapi ia sendiri yang mengenalinya:
Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
m:0x0 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
Release + m:0x4 + b:8 (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Pendekatan D:
Memperbarui .xbindkeysrc
file dengan:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
"xdotool click 1"
b:1
Terlalu sederhana ... tetapi mengarah ke loop klik tanpa batas.
MEMPERBARUI:
Sementara itu saya sudah membeli Logitech G502 dan memperhatikan bahwa setelah dikonfigurasi melalui driver pada Windows tidak hanya profil itu sendiri yang disimpan pada memori perangkat tetapi penekanan tombol yang sebenarnya dilakukan oleh mouse. Itu sebenarnya memecahkan masalah saya di Linux!
Satu-satunya tikus lain yang saya ingat yang dapat melakukan itu adalah Razer Copperhead pada masa itu. Tapi saya rasa ada tikus lain yang tersedia saat ini yang dapat melakukan hal yang sama.
Jawaban:
Saya menghabiskan banyak waktu untuk mencoba membuat ikatan itu berhasil. Saya akhirnya menemukan solusi, yang rumit tetapi berfungsi dengan baik dan tidak menyiratkan perangkat lunak pihak ketiga. Saya membagikannya di sini berharap ini akan membantu orang. Selain itu, saya tahu ini tidak sempurna dalam hal keamanan, jadi umpan balik yang membangun lebih dari diterima.
Ada solusi yang sangat bagus, seperti yang diusulkan di sini , tetapi Selalu menderita dari keterbatasan xbindkeys yang mengambil seluruh mouse, membuat pengubah + pemetaan klik mouse tidak pasti. Ditambah solusi berbasis tipu daya dari tautan di atas menggunakan ctrl + plus / ctrl + minus yang tidak dikenali oleh Gimp misalnya.
Saya tahu bahwa yang kami inginkan adalah tombol mouse yang bertindak sebagai keyboard, jadi saya menggunakan uinput, yang dapat diakses melalui python , menulis skrip yang memantau / dev / my-mouse untuk klik tombol jempol dan mengirim tombol ctrl ke keyboard virtual. Berikut langkah-langkah terperinci:
1. Buat aturan udev
Kami ingin perangkat dapat diakses (hak dan lokasi).
Untuk mouse:
Udev akan mencari perangkat yang dikenali oleh kernel dengan nama seperti event5, dan saya memilih mouse saya dengan nama tersebut. Instruksi SYMLINK memastikan saya akan menemukan mouse saya di / dev / my_mx_mouse. Perangkat akan dapat dibaca oleh anggota grup "mxgrabber".
Untuk menemukan informasi tentang perangkat keras Anda, Anda harus menjalankan sesuatu seperti
Untuk uinput:
Tidak perlu untuk symlink, uinput akan selalu di
$/dev/uinput
atau$/dev/input/uinput
tergantung pada sistem yang Anda . Cukup beri dia grup dan hak untuk membaca DAN menulis tentu saja.Anda harus mencabut steker - mouse Anda, dan tautan baru akan muncul di / dev. Anda dapat memaksa udev untuk memicu aturan Anda
$udevadm trigger
2. Aktifkan Modul UINPUT
Dan untuk membuatnya tahan boot:
3. Buat grup baru
Atau apa pun yang Anda sebut grup akses Anda. Maka Anda harus menambahkan diri Anda ke dalamnya:
4. Skrip python
Anda perlu menginstal pustaka python-uinput (jelas) dan pustaka python-evdev . Gunakan pip atau paket distribusi Anda.
Scriptnya cukup mudah, Anda hanya perlu mengidentifikasi kode event.code Anda.
5. Nikmati!
Yang Anda butuhkan sekarang adalah membuat file python Anda dapat dieksekusi, dan minta manajer desktop Anda untuk memuat file saat startup. Mungkin juga segelas anggur untuk merayakan pekerjaan yang baik!
6. Ekstra gratis
Saya menggunakan xbindkeys untuk perilaku tambahan. Misalnya, konfigurasi berikut mungkin bagus jika Anda memiliki mouse dengan klik sisi roda:
Agar kombinasi terakhir ini berfungsi, Anda harus menonaktifkan tombol yang Anda konfigurasi untuk skrip python , jika tidak, tombol itu masih akan diambil oleh xbindkeys. Hanya tombol Ctrl yang harus tetap:
Muat ulang dengan
$ xmodmap ~/.Xmodmap
7. Kesimpulan
Seperti yang saya katakan di awal, saya tidak sepenuhnya senang dengan kenyataan bahwa saya harus memberikan diri saya hak untuk menulis ke / dev / uinput, bahkan jika itu dianggap sebagai grup "mxgrabber". Saya yakin ada cara yang lebih aman untuk melakukan itu, tetapi saya tidak tahu caranya.
Sisi baiknya, ini bekerja sangat, sangat baik. Kombinasi tombol keyboard atau mouse apa pun yang berfungsi dengan tombol Ctrl keyboard sekarang bekerja dengan salah satu mouse !!
sumber
Saya menemukan solusi dengan PyUserInput . Ini akhirnya menjadi sangat sederhana dan tidak memerlukan hak administrasi. Dengan python 2 dan PyUserInput terinstal, saya menggunakan skrip berikut:
Setelah memberikan hak eksekusi pada skrip, saya menyebutnya dengan garis
~/.xsessionrc
, misalnya~ / path / ke / script.py &
Catatan . ini tidak mencegah peristiwa tombol mouse dari penembakan. Dalam kasus saya, saya biasa
xinput set-button-map
mengubah pemetaan tombol xinput dan menetapkan jumlah tombol yang saya minati untuk sesuatu yang tidak digunakan.Misalnya, jika Anda ingin menggunakan tombol 8 pada mouse Anda tetapi tombol 8 sudah memiliki fungsi (misalnya,
page-next
), Anda dapat menggunakan yang berikut ini.xsessionrc
asalkan tombol
12
tidak membawa arti ke OS, dan menetapkan fungsi kustom untuk tombol12
dalam.xbuttonmodifier.py
, skrip yang saya jelaskan di atas.sumber
xinput
. Lihat pertanyaan yang diedit.Saya punya solusi parsial. Saya belum menemukan cara menghapus peta tombol yang ada, jadi Anda berakhir dengan klik tombol dan pengubah yang Anda inginkan. Jadi jika tombol mouse itu memiliki beberapa tujuan yang sudah ada, itu masih akan menyala. Misalnya, memetakan kembali tombol mouse kanan ke tombol kontrol akan menghasilkan kontrol + klik yang dikirim.
Bagaimanapun, saya menemukan posting forum yang mirip dengan pertanyaan Anda yang jawabannya adalah menginstal btnx dan mengkonfigurasi pengubah Anda melalui itu. Sepertinya btnx tidak lagi tersedia melalui repo. Ada ppa, tetapi tidak berfungsi untuk ubuntu terbaru.
Posting forum: posting: http://ubuntuforums.org/showthread.php?t=1245930
Tetapi sumber tersedia:
Anda bisa mengkompilasinya dari sumber, tetapi ini akan menempatkan file di sistem Anda yang tidak bisa dikelola oleh pengelola paket.
Yaitu, file-file berikut:
Symlink berikut:
Jadi ... jika Anda tidak keberatan membangun dari sumber ...
Dapatkan dependensi untuk btnx:
Jika Anda belum pernah membangun sesuatu dari sumber, Anda mungkin perlu build-essential juga:
Lalu dapatkan dan kompilasi btnx:
Ini memiliki alat konfigurasi GUI yang terpisah. Dapatkan dependensi untuk itu:
Sekarang dapatkan dan kompilasi alat config gui:
Sekarang jalankan alat:
Klik pada Detect Mouse Buttons Jika Anda ingin dapat membaca petunjuk saat Anda menggunakan alat, mengubah ukuran jendela yang muncul, teks dialog akan terpotong kemudian jika Anda tidak dan jika Anda mencoba untuk mengubah ukuran selama deteksi itu akan membatalkan deteksi. Jadikan jendela sedikit lebih besar.
Klik pada Tekan untuk memulai deteksi tetikus, kemudian cobalah untuk tidak menggerakkan tetikus sampai teks berubah ... Membutuhkan waktu sekitar 5-10 detik. Teks akan berubah. Ketika itu terjadi, abaikan apa yang dikatakannya dan klik Forward.
Klik tombol "Tekan untuk memulai deteksi tombol"
Di sini Anda akan mengklik satu tombol mouse Anda beberapa kali (hingga bilah status terisi). Kemudian atur nama tombol ke sesuatu yang akan Anda kenali nanti (mis: LeftButton) Klik tombol Tambah.
Ulangi ini untuk setiap tombol mouse (jangan lupa gulir roda, gulir klik, dll). Anda mungkin dapat melewati tombol apa saja yang tidak ingin Anda remap.
Setelah Anda menambahkan semua tombol, klik OK.
Di GUI utama, klik Tombol, di panel kiri pilih tombol yang ingin Anda remap. Ini akan menggunakan nama yang Anda masukkan pada langkah sebelumnya. Untuk keperluan Anda, Anda hanya perlu memilih Pengubah kunci di bawah Kombinasi tombol di sebelah kanan.
Jangan klik hapus pada layar ini, itu akan menghapus tombol. Anda harus kembali dan mendeteksi tombol lagi jika Anda melakukannya.
Kembali ke layar Conrigurations dan klik restart btnx.
Coba tombol baru.
Jika Anda ingin menghapus instalan aplikasi, hentikan program btnx dan kemudian masuk ke direktori masing-masing memeriksa direktori dan lakukan uninstall:
sumber