Saya berjuang dengan ini selama akhir pekan, dan perlu memetakan kembali tombol mouse saya.
Saya berjuang dengan ini selama akhir pekan, dan perlu memetakan kembali tombol mouse saya.
Jawaban:
Saya memiliki mouse Logitech dengan 9 tombol, dan menekan "tombol tengah" (# 2) melibatkan mengklik roda gulir. Saya tidak suka ini karena saya kikuk dan biasanya akhirnya menggulir jendela saya ketika saya mencoba mengklik roda. Jadi saya ingin secara otomatis memetakan kembali tombol sisi atas (# 9 dalam hal ini) ke tombol tengah (# 2). Saya juga ingin memetakan tombol sisi bawah (# 8) sehingga menjalankan klik dua kali tombol kiri (# 1).
Meskipun tujuan saya spesifik, solusi di bawah ini dapat digeneralisasi untuk situasi apa pun di mana Anda ingin memetakan ulang tombol mouse secara otomatis saat startup.
Anda perlu xinput
diinstal untuk tugas ini. Ini bisa dilakukan sepenuhnya di .xsessionrc
file Anda . Pertama, gunakan xinput
untuk menemukan nama yang ditetapkan untuk mouse Anda, yang kemudian dikorelasikan dengan ID perangkat input. Di bawah ini adalah beberapa contoh keluaran dari laptop saya:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Mouse saya memanggil dirinya sendiri Logitech USB Laser Mouse
dan ditampilkan sebagai id=11
. Mouse Anda akan memiliki nama yang berbeda; mencari tahu yang tersisa sebagai latihan untuk pembaca.
Saat Anda masih mengetahui ID perangkat dalam sesi ini , cari tahu berapa banyak tombol yang dipikirkan oleh handler input yang dimiliki mouse Anda, dengan menggunakan . Ini mungkin berbeda dari jumlah tombol yang terlihat pada perangkat.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
Dengan mouse saya, hanya ada 9 tombol fisik yang jelas, tetapi xinput
laporan 16.
Mengingat sifat USB, ID ini dapat berubah setiap kali Anda memulai ulang, sehingga tidak cukup untuk skrip sesuatu yang secara statis dikunci ke ID yang Anda temukan sekali. Anda harus menguraikan ini secara dinamis saat memulai dan menjalankan peta ulang Anda berdasarkan ID saat ini.
Sekarang setelah Anda tahu namanya, Anda dapat menggunakannya xinput test
untuk mencari tahu kunci mana yang harus dipetakan. Tekan tombol mouse yang ingin Anda petakan dari dan ke, untuk mendapatkan indeksnya. (Untuk referensi, 1, 2, dan 3 "selalu" (yaitu, biasanya) merujuk ke tombol kiri, tengah, dan kanan mouse 3 tombol. Pemetaan ulang umum membalikkan ini untuk membuat mouse kidal. )
button press 2
button release 2
button press 9
button release 9
Dalam hal ini saya menemukan bahwa saya ingin memetakan tombol # 9 (samping, atas) ke tombol # 2 (tengah).
Sekarang setelah Anda tahu nama mouse Anda, dan tombol mana yang ingin Anda ubah, Anda dapat menulis ~/.xsessionrc
skrip yang dipanggil xinput
untuk menjalankan pemetaan ulang tombol saat startup. Di bawah ini adalah naskah lengkap saya.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Baris pertama di sini menetapkan variabel sesi sementara sama dengan ID mouse seperti yang dilaporkan oleh xinput
. Ini dilakukan dengan grep
memasukkan nama mouse yang diketahui dalam laporan xinput
, lalu menggunakan sed
untuk mengekstrak nomor ID dari id=xxx
token itu dalam laporan. Nilai ini kemudian digunakan dalam xinput set-button-map
arahan, yang mengeksekusi pemetaan ulang. Pada contoh di atas, satu-satunya perubahan adalah tombol # 9 sedang dipetakan kembali ke tombol meniru # 2. Semua lainnya tetap pada pengaturan standarnya.
Pembaruan: Seperti yang ditunjukkan @Lokasenna di bawah ini , jika perangkat Anda melaporkan dirinya sebagai mouse dan keyboard, Anda mungkin perlu membatasi jumlah hasil grep
penggunaan -m 1
.
Lihat juga jawaban ini .
Anda perlu xinput
,, xbindkeys
dan xautomation
(termasuk xte
) diinstal untuk tugas ini.
Gunakan xinput list
dan xinput test
untuk menemukan ID perangkat mouse Anda dan jumlah tombol yang ingin Anda tetapkan. Dalam kasus saya, saya ingin memetakan tombol sisi bawah (# 8) menjadi klik dua kali tombol kiri (# 1).
Buat atau edit ~/.xbindkeysrc
. Format file ini adalah serangkaian garis berpasangan. Baris pertama adalah perintah yang akan dieksekusi untuk suatu acara; baris kedua adalah deskripsi acara. Kami akan menggunakan xte
komponen xautomation
untuk mengirim acara langsung ke penangan input.
Untuk membuat acara klik dua kali ketika tombol dilepaskan, saya menambahkan yang berikut:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Konfigurasi ini memetakan urutan dua klik mouse pada tombol # 1 hingga pelepasan tombol # 8. (Secara teori saya kira Anda dapat memetakan perintah apa pun ke tombol mouse, tetapi ini adalah kasus yang paling umum. Lihat jawaban ini untuk contoh praktis lainnya.)
Untuk pengguna dengan banyak mouse yang terpasang pada sistem Anda, Anda juga harus memberikan ID perangkat. Ini mungkin tidak berlaku untuk semua pengguna dan ditemukan di Ubuntu 16.04 dengan Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Kemudian modifikasi file .xbindkeysrc dengan mereferensikan id = nilai dari output perintah (id = 9 dalam contoh ini):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
pernyataan lama saya dengan sed
pernyataan Anda dalam contoh saya. Terima kasih atas peningkatannya!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
tidak menunjukkan mouse saya dua kali, seperti ini: ↳ USB OPTICAL MOUSE id = 12 [pointer slave (2)] ↳ USB OPTICAL MOUSE id = 13 [pointer slave (2)] Hanya ID 13 yang akan menangkap perintah xinput test
. Script akan selalu menangkap ID pertama. Tapi mengapa itu dua kali? Keduanya menghilang ketika saya mencabut mouse ini dan muncul kembali saat terhubung.
Langkah singkat untuk ini adalah:
Ada utilitas yang disebut xinput
. xinput list
atau hanya xinput
akan menampilkan semua perangkat input X dan ID mereka. Di sini Anda menemukan ID mouse yang ingin Anda remap.
Saya akan menggunakan ID saya sebagai contoh, dari pengaturan saya, yaitu 21, kemudian xinput --get-button-map 21
akan ditampilkan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Sekarang, jika Anda ingin, katakan, menukar tombol kiri dan kanan yang Anda jalankan
xinput --set-button-map 21 3 2 1
Di sinilah kita, pemetaan ulang dilakukan.
Untuk menjalankannya saat startup cukup masukkan ini ke dalam file:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
berikan izin yang dapat dieksekusi
chmod +x leftmouseremap.sh
Akhirnya, tambahkan ini ke Aplikasi Statrtup secara manual dari GUI atau, jika Anda menginginkannya dari CLI, letakkan teks di bawah ini (ubah jalur ke milik Anda) di dalam file Anda ~/.config/autostart
, ini milik saya ( less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
Perlu diingat, bahwa dengan KDE jalannya akan seperti ~/.kde/Autosart
, bagi manajer Desktop lainnya ini mungkin terlihat sangat berbeda. Atau, menjalankan startup dapat dilakukan dengan pendekatan umum dengan menggunakan /etc/rc.local
.
Saat menggunakan jawaban hebat zerobandwidth , beberapa perangkat, seperti Logitech MX Ergo, muncul sebagai penunjuk dan perangkat keyboard :
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
Akibatnya, grep "Logitech MX Ergo"
akhirnya mengembalikan dua nilai. Yang terakhir akhirnya dimasukkan sebagai item pertama dalam string pemetaan dan mengacaukan semua tombol mouse Anda.
Cara mengatasinya mudah - hanya menggunakan grep
's argumen maksimum-hitung, -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Saya dapat mengubah pemetaan tombol tengah mouse Logitech ke 'Return' menggunakan Easystroke Gesture Recognition yang saya unduh dari Ubuntu Software Center. Edit: Dalam aplikasi, Anda akan memilih Add Action, Beri nama, pilih jenis kunci, klik pada Detail dan tekan Enter, tekan Record Stroke, dan selama prompt tekan ke bawah pada tombol tengah.
xinput
dengan tombol yang tidak muncul saat menggunakan xinput list <devID>
.
Sebelum 12,04 ada alat grafis mudah yang disebut "btnx" di repositori standar, yang ditambahkan sebagai "Properti tombol" di Konfigurasi Sistem. Namun sayangnya itu dijatuhkan. PPA "tidak dipercaya" saat ini dikelola untuk 14,04, 16,04, dan 18,04 ada di sini: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (ditemukan di https://launchpad.net/ubuntu/xenial/+source / btnx )
Ini tidak akan berintegrasi dengan pengaturan Sistem tetapi berfungsi cukup baik pada laptop saya dengan mouse 5 tombol murah. Itu dapat memetakan kembali ke penekanan tombol dan perintah juga dan konfigurasi jauh lebih sederhana daripada dengan metode lain!
Saya memiliki HP elitebook 2570p, Ubuntu 18.04.2. Di sini saya memiliki trackpoint yang tidak berguna bagi saya dan di sini ada 2 tombol trackpoint yang tidak berguna di bawah spasi
Saya tidak menggunakan tombol ini karena saya memilikinya di bawah touchpad. Saya ingin memetakan kembali tombol ini ke kiri = back_button (Alt_L + Kiri), yang kanan = middle_mouse_button. Trackpoint dalam "xinput" adalah id = 11 dan tombol kiri adalah nomor 1, kanan adalah 3.
Bisakah seseorang menulis kepada saya kode yang benar untuk hanya menyalin ke terminal? Saya telah menggabungkan dengan xbindkeysrc tetapi itu menetapkan tindakan apa pun untuk kedua tombol (trackpoint dan touchpad)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'