Bisakah saya memetakan ulang tombol Caps Lock untuk memutar audio?

16

Saya mencoba menggunakan kembali tombol Caps lock yang tidak berguna untuk sesuatu yang bermanfaat pada 16,04 MATE. Saya telah menemukan

setxkbmap -option ctrl:nocaps

untuk menonaktifkannya, tetapi bisakah itu dipetakan ulang untuk memutar / menghentikan VLC misalnya? Terima kasih atas jawaban Anda!

2BFrank
sumber
Saya tidak berpikir bahwa ini akan berhasil .... karena sejumlah alasan ... misalnya, saya pikir linux memperlakukan capslock sebagai pengubah dan bukan kunci terpisah. Itu mungkin akan menjadi alasan mengapa Anda tidak dapat mengikatnya di VLC. Juga, jika Anda menonaktifkannya, itu dinonaktifkan. Tapi Anda bisa bermain-main di commandline dan mencoba mengikatnya vlc --key-play-pause <key-string>, tapi saya belum menemukan string yang diterima VLC sebagai capslock ...
Robert Riedl
1
Saya menginstal dconf-editormencoba beberapa hal, diinstal xdotoolmencoba beberapa hal dan akhirnya xbindkeysdan mencoba beberapa hal. Di akhir latihan yang sia-sia ini tombol jeda / putar keyboard saya rusak DAN tombol putar / jeda layar saya diklik dan musik tidak mau diputar. Saya melakukan ini pada 16,04 sehingga reboot pada 18,04 untuk mengkonfirmasi semuanya masih berfungsi dan itu adalah peretas perangkat lunak yang melakukannya. Satu-satunya rahmat yang menyelamatkan adalah saya hanya memutar musik melalui ponsel Android dan bukan PC. Hanya kepala bagi orang lain untuk berhati-hati dan mendokumentasikan apa yang Anda lakukan untuk mesin Anda lebih baik daripada saya.
WinEunuuchs2Unix
1
@ pbhj Terima kasih atas tipnya. Entah bagaimana saya berhasil membuat play / pause bekerja kembali dengan tombol layar dan tombol pause / play keyboard di Ubuntu 16.04. Saya hanya ingin memperingatkan orang-orang tentang kemungkinan perangkap bereksperimen dengan utilitas papan ketik tingkat rendah ini.
WinEunuuchs2Unix
1
2BFrank: Pastikan untuk menerima salah satu jawaban jika itu memecahkan masalah Anda. Karena ada hadiah untuk pertanyaan ini, meninggalkan jawaban yang tidak dapat diterima (dan tidak memberikan hadiah secara manual) hanya akan memberikan setengah dari hadiah kepada @Sebastian Stark, karena jawabannya adalah yang tertinggi.
Nonny Moose
1
@NonnyMoose Terima kasih atas komentar itu. Saya akan menyerahkannya hanya pada jawaban yang diterima secara otomatis atau total suara terbanyak, tetapi saya tidak tahu bahwa itu membagi dua penghargaan, jadi saya akan secara manual memberikannya ke total suara tertinggi dalam waktu sekitar dua jam jika tidak ada jawaban yang diterima.
Chai T. Rex

Jawaban:

11

evtest dan dbus

Ini adalah versi yang melibatkan skrip kecil yang berjalan di latar belakang. Beberapa langkah mudah perlu diambil:

  • Instal evtest Program: sudo apt install evtest. Program ini dapat memecahkan kode dan mencetak peristiwa mentah dari /dev/input/hierarki perangkat.

  • Tambahkan akun pengguna Anda ke grup input. Logout dan login lagi. (Ini diperlukan karena kita akan membaca dari beberapa perangkat di bawah /dev/input/, yang biasanya hanya dapat dilakukan oleh root atau pengguna dalam grup input. Kita dapat menjalankan skrip sebagai root, tetapi kemudian kita harus menemukan cara untuk memberi tahu pengguna mana yang Misalnya dbus perlu diajak bicara.)

  • Nonaktifkan tombol capslock seperti yang Anda lakukan atau gunakan preferensi Mate yang sesuai. Ini juga akan berfungsi jika Anda memetakan tombol capslock ke ctrl, seperti yang dilakukan banyak orang.

  • Simpan skrip berikut di suatu tempat, mis $HOME/bin/capshackdan buatlah itu dapat dieksekusi:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

Script di atas akan mendengarkan acara keyboard Anda dan menjalankan perintah ketika tombol capslock ditekan. Perintah yang dijalankan menggunakan dbus untuk mengirim acara play / pause ke instance VLC yang sedang berjalan. Anda mungkin harus mengubah KEYBOARDvariabel untuk menunjuk ke keyboard Anda yang sebenarnya, tetapi kemungkinan nilai di atas akan berfungsi.

Jika Anda lebih suka fungsi toggleVLC () dipanggil ketika Anda melepaskan tombol capslock, Anda dapat mengubah EVENTvariabel dalam skrip sehingga berakhir dengan value 0alih - alih value 1.

Selain itu, mungkin bagi Anda kode kunci tombol capslock berbeda dari 58. Anda dapat memeriksanya dengan menjalankan evtest, lihat output ketika Anda menekan capslock, dan sesuaikan variabel ACARA. Anda bahkan tidak perlu mencocokkan dengan kode kunci dan mengatur ACARA hanya untuk (KEY_CAPSLOCK), value 1.

Alih-alih menggunakan skrip evtest dan di atas, Anda dapat menggunakan thd dari paket triggerhappy (sesuatu seperti thd --dump /dev/input/*akan memberikan output yang serupa) tetapi saya menemukan bahwa sedikit kurang mendidik.

Sekarang kami membuat unit systemd pengguna untuk memulai skrip secara otomatis di latar belakang:

  • Buat hierarki systemd pengguna: mkdir -p $HOME/.config/systemd/user

  • Tambahkan teks berikut ke file $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Aktifkan unit layanan yang baru saja Anda buat: systemctl --user enable capshack

  • Mulai layanan: systemctl --user start capshack

Mulai sekarang Anda harus dapat beralih bermain / jeda di VLC menggunakan tombol capslock. Skrip latar belakang harus dimulai secara otomatis saat Anda masuk.

memicu bahagia

Seperti yang sudah disebutkan, Anda juga bisa menggunakan paket triggerhappy untuk melakukan ini. Ini adalah metode yang disukai untuk orang-orang yang ingin bermain-main kurang dengan sistem dan lebih suka solusi yang lebih solid.

  • Tambahkan pengguna ke inputgrup seperti di atas

  • Instal paket: sudo apt install triggerhappy

  • Tambahkan konfigurasi untuk triggerhappy ke ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • Jalankan thd seperti ini: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Jadikan thd berjalan untuk pengguna Anda dengan cara yang sama seperti yang dijelaskan untuk capshack.

  • Pastikan Anda hanya menjalankan salah satu dari metode yang disebutkan (capshack atau thd), untuk tidak menggandakan toggle yang ditekan setiap tombol.

Saya menguji semua ini pada 18,04 di bawah sesi standar dan 16,04 pasangan. Tetapi secara teoritis harus juga bekerja di bawah wayland atau dengan lingkungan desktop lainnya.

Sebastian Stark
sumber
@ WinEunuuchs2Unix terima kasih telah menyebutkan. Saya pribadi lebih suka gaya yang lebih verbose dari klausa penuh if / then / else: Ini lebih eksplisit, lebih mudah untuk diperluas dan tidak cenderung membuat garis terlalu panjang. Meskipun dalam hal ini memang tidak terlalu menjadi masalah.
Sebastian Stark
Saya setuju tentang garis terlalu lama. Baru-baru ini saya mengadaptasi gaya pengkodean menjadi dua baris dengan baris pertama [[ test ]] && \ dan baris kedua menjorok empat spasi dengan <command>untuk menjalankan tes positif. Saya setuju dengan sepenuh hati tentang keterbacaan karena rekomendasi saya asing bagi kebanyakan bahasa pemrograman.
WinEunuuchs2Unix
ini bagus! Meskipun saya pikir itu sepertinya triggerhappyharus menjadi cara untuk pergi, karena evtestsebenarnya ini adalah program debugging :)
Robert Riedl
ya, evtest untuk belajar, untuk melakukan :)
Sebastian Stark
... Bagi saya, kode kunci 58 adalah m, jadi skrip itu tidak berfungsi. Saya sarankan memeriksa xmodmap -pke | grep Caps_Locksebelum menggunakan skrip ini untuk memastikan kode kunci sudah benar.
Nonny Moose
9

Di Ubuntu 16,04 setelah menghabiskan berjam-jam googling & mengutak-atik dconf-editordan xbindkeyssaya menemukan solusi yang sangat mudah:

  • Penyiapan sangat cepat dalam 2 menit
  • Hanya xdotool yang perlu diinstal
  • Tidak perlu skrip
  • Caps lock masih dikenali tetapi tidak mengaktifkan huruf besar / kecil
  • Bekerja dengan Pengaturan Pintasan Kustom Keyboard Ubuntu standar

Jika Anda membutuhkan XF86AudioPlaydukungan Gnome yang Anda butuhkan xdotool(tidak diperlukan untuk VLC seperti yang ditentukan OP):

sudo apt install xdotool

Sekarang inilah bagian yang sulit. Setiap kali Anda menekan Caps LocKtombol untuk beralih musik antara Putar dan Jeda, huruf kapital juga matikan dan hidupkan.

Gunakan metode ini untuk mematikan sakelar Caps Lock sambil tetap mengaktifkan kunci:

setxkbmap -option caps:none

Pemutar musik yang mematuhi Gnome

Kemudian di Ubuntu 16.04 buka Pengaturan >> Keyboard >> Pintasan >> Pintasan Khusus :

audio jeda-putar shortcut.png

  • Tetapkan nama menjadiAudio Play
  • Setel perintah kexdotool key XF86AudioPlay
  • Kemudian klik Applytombolnya

Setelah menambahkan opsi baru, tombol pintasan yang ditetapkan akan membaca Dinonaktifkan . Klik Dinonaktifkan dan ketika diminta untuk menetapkan tombol tekan Caps LocKtombol.


Pemutar musik seperti VLC

Ikuti langkah-langkah untuk Gnome di bagian sebelumnya tetapi untuk perintah gunakan ini sebagai gantinya:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC tidak akan mengenali kunci media: Bagaimana cara membuat tombol media keyboard untuk bekerja dengan VLC secara global? bahkan ketika dimasukkan ke dalam keyboard. Karenanya pintasan keyboard khusus untuk XF86AudioPlay tidak berguna dengan xdotool.


Mengatur pintasan keyboard khusus dari baris perintah

T&J ini membahas cara mengatur pintasan keyboard khusus dari baris perintah: Bagaimana mengatur pintasan keyboard khusus dari terminal?


Nonaktifkan caps lock secara permanen

Langkah selanjutnya adalah membuat ini setxkbmap -option caps:nonepersisten di seluruh reboot. Googling menghasilkan jawaban ini oleh Terdon: Simpan pengaturan setxkbdmap :

Cara mudah adalah menambahkan perintah ke $HOME/.profilefile Anda (Anda dapat membuatnya jika tidak ada):

setxkbmap -option caps:none

Itu harus membuatnya berjalan setiap kali Anda masuk.

Perhatikan bahwa Anda harus menggunakan $HOME/.profiledaripada $HOME/.bash_profile, $HOME/.bashrcatau file serupa lainnya. Ini karena pengaturan ini harus dibaca oleh manajer login Anda.

WinEunuuchs2Unix
sumber
Sederhana, anggun, melakukan pekerjaan: Jawaban sempurna bagi saya!
Fabby
@ Fabby Yah aku harus mengakui itu mudah untuk men-setup dan menguji dan tidak memerlukan mucking tingkat rendah tentang atau terus-menerus menjalankan skrip. Saya telah melalui empat upaya yang berbeda sebelum menemukan metode ini. Masih tidak akan menyebutnya sempurna tetapi TERIMA KASIH! . Jika mereka membiarkan saya kembali ke Eropa lagi, saya akan membelikan Anda segelas.
WinEunuuchs2Unix
Apakah ini berhasil dengan Wayland?
danzel
@ Tabzel Aku takut Wayland tidak bekerja dengan setxkbmap -option caps:none. Program utilitas diinstal namun Wayland terus berganti-ganti antara huruf besar dan huruf kecil. Anda dapat memposting pertanyaan terpisah tentang bagaimana cara agar Wayland dihormati setxkbmap.
WinEunuuchs2Unix
3

Jawaban ini telah diuji pada Ubuntu MATE 16.04.4 LTS dalam sebuah VM (tetapi keyboardnya adalah keyboard USB pada passthrough, sehingga seharusnya tidak membuat perbedaan). Ini juga tidak memerlukan perangkat lunak tambahan, dan dapat dilakukan pada instalasi vanilla tanpa menginstal paket apa pun, dan itu tetap ada di antara boot.

Remap Caps Lock

  1. Edit file /usr/share/X11/xkb/symbols/pcsebagai root. Berhati-hatilah untuk tidak membuat kesalahan di sini (seperti melupakan koma) karena Anda mungkin tidak dapat menggunakan keyboard lagi jika melakukannya. (Coba tebak apa yang saya pelajari dengan cara yang sulit?;)

  2. Berikan komentar

        key <CAPS> {    [ Caps_Lock     ]   };
    

    dengan menempatkan dua garis miring ke depan ( //) di awal.

  3. Tambahkan di bawahnya baris berikut:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Berikan komentar

        modifier_map Lock   { Caps_Lock };
    

    dengan cara yang sama seperti di atas.

  5. Mulai ulang.

Catatan: (dikreditkan ke danzel karena menunjukkan ini) Pembaruan paket xkb-datadapat menimpa file ini. Metode yang cukup aman untuk mencegah hal ini adalah mengalihkan jalur menggunakan dpkg-divert. (Saya katakan "cukup aman" karena sumber hulu untuk file ini belum dimodifikasi dalam tiga tahun.)

Metode Alternatif

Nonaktifkan tombol Caps Lock secara manual di pengaturan tata letak keyboard Anda, lalu gunakan pendekatan dalam jawaban ini untuk menambahkan pemetaan ulang kunci Anda sendiri.

Masalah?

Kunci caps lock Anda tidak lagi mengunci caps, dan telah dipetakan ulang untuk Putar / Jeda pada saat ini. Anda harus dapat memutar dan menjeda musik di VLC sekarang. Jika berhasil pada saat ini, Anda dapat melewati sisa instruksi ini.

Namun, ketika saya mencobanya, VLC tidak menanggapi kunci Play / Pause.

Pastikan pintasan keyboard diatur dengan benar

  1. Buka Pintasan Keyboard (Sistem → Preferensi → Perangkat Keras → Pintasan Keyboard)

  2. Pastikan bahwa "Mainkan (atau Mainkan / Jeda)" diatur ke "XF86AudioPlay"

  3. Jika tidak, klik pada bagian "Pintasan" dan tekan tombol Mainkan / Jeda baru Anda untuk mengatur pintasan. tangkapan layar bermanfaat

  4. Jika masih tidak berhasil, reboot beberapa kali untuk ukuran yang baik. (Sebenarnya itulah yang memperbaikinya bagi saya.)

Nonny Moose
sumber
Ini dapat mengganggu xkbopsi, terutama opsi caps:.... Juga, itu bisa ditimpa oleh pembaruan sistem.
danzel
Memang bisa. Poin bagus tentang pembaruan sistem. Saya akan menambahkan catatan tentang ini dalam jawaban saya. Terima kasih untuk umpan baliknya!
Nonny Moose
Dear All, wow !! Maaf sudah cukup lama :-) dan sekarang saya menemukan semua upaya yang Anda semua lakukan dalam solusinya !! Akan mencoba @ WinEunuuchs2Unix menjawab, dan membuat Anda tetap diposting. Terima kasih, LLAP !!
2BFrank
@ 2BFrank Karena penasaran, apakah Anda menemukan jawaban yang berhasil?
Nonny Moose
1

Instal xbindkeys, xcape dan playerctl . Pastikan xcape(pemetaan CapsLockke kunci cadangan seperti Alt+F12oleh xcape -e 'Caps_Lock=Alt_L|F12) dan di playerctl-autostart pada saat masuk, dan tambahkan ke file ~/.xbindkeysrcdua baris

"playerctl play-pause"
  Alt + F12
Enno
sumber
0

Jadikan tombol capslock Anda tombol putar / jeda

Solusi ini akan memetakan ulang scancode kunci capslock Anda ke kode kunci yang berbeda pada driver input kernel, dalam hal ini play / pause.

Keuntungan

  • Tidak perlu memodifikasi file sistem yang ada (hanya satu file baru yang harus dibuat)
  • Aplikasi tidak akan tahu bahwa itu sebenarnya adalah tombol capslock tetapi berpikir tombol putar / jeda yang sebenarnya telah ditekan
  • Tidak perlu menonaktifkan capslock, tidak ada kemungkinan untuk mengacaukan xkbkonfigurasi

Kekurangan

  • Harus dilakukan untuk setiap keyboard secara individual (yang, tergantung pada situasinya, juga dapat menjadi keuntungan)

Prasyarat

  • evtest (dapat diinstal melalui sudo apt-get install evtest)

Prosedur

Di terminal, jalankan sudo evtestdan pilih keyboard Anda. Jika tidak ada output saat Anda menekan tombol, tekan Ctrl+ Cdan coba perangkat lain. Ingat nomor acara perangkat yang Anda pilih, kami akan membutuhkannya nanti. Tekan tombol capslock. Beberapa baris seperti berikut ini akan muncul:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Kami membutuhkan nilai dari MSC_SCANgaris sebelum KEY_CAPSLOCKgaris. Pada contoh di atas, ini akan menjadi 70039, tetapi scancode pada keyboard Anda mungkin berbeda.

Sekarang jalankan perintah berikut, tetapi ganti X dengan nomor acara perangkat yang Anda gunakan untuk evtestperintah:

grep "" /sys/class/input/eventX/device/id/*

... ini akan menampilkan bustype, product, vendordan versionkeyboard.

Buat sebuah file bernama 65-keyboard-custom.hwdbdalam /etc/udev/hwdb.d/(akses root diperlukan) dengan konten berikut:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...dimana

  • [bus], [vendor], [produk] dan [versi] memiliki tepat 4 karakter dan huruf harus huruf besar
  • [scancode] harus berupa huruf kecil
  • yang evdev:...garis memiliki tidak ada ruang sebelumnya
  • yang KEYBOARD_KEY...garis memiliki tepat satu ruang sebelumnya

Sebagai contoh:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Terakhir, kompilasi konfigurasi baru ke basis data perangkat keras:

sudo systemd-hwdb update

Jika Anda ingin segera menerapkan perubahan, informasikan udev:

sudo udevadm trigger

Jika Anda ingin mengembalikan perubahan, hapus saja file yang Anda buat dan reboot.

Anda dapat menemukan informasi lebih rinci dalam jawaban asli saya tentang topik ini.

danzel
sumber
@Nonny Moose itu sebabnya saya menulis "Harus dilakukan untuk setiap keyboard secara individual". Plus, Anda dapat menentukan keyboard sebanyak yang Anda suka, sehingga Anda benar-benar hanya perlu melakukan ini untuk setiap keyboard baru yang Anda beli. Di sisi lain, Anda dapat menghilangkan keyboard jika Anda suka, misalnya karena sudah memiliki tombol putar / jeda fisik.
danzel
... Yah, aku tidak memperhatikan. Saya berdiri dikoreksi.
Nonny Moose
0

Mungkin menggunakan xbindkeysatau XTEAnda bisa melakukannya. Tapi pertama-tama pastikan apa yang dimaksud dengan Kode Kunci, Anda dapat melihat kode untuk tombol capslock menggunakan perintah xevdi terminal dan menekannya (Anda dapat melihat kode kunci dari setiap tombol keu atau mouse, termasuk mouse Gaming). Dengan capslock dan play keycode tombol di tangan Anda dapat mengedit file confi xbindkeys dan meletakkan perubahan Anda di sana. gunakan touch ~/.xbindkeysrcuntuk membuat file konfigurasi (jika sistem tidak membuatnya secara otomatis) dan nano ~/.xbindkeysrcuntuk mengeditnya. Saya sudah menggunakannya bulan lalu dan ini sebuah contoh. Lihatlah tautan-tautan ini yang mungkin sangat membantu Anda.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

Remap tombol dari mouse gaming saya ke tombol keyboard

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/

Edmilson Gonçalves
sumber