Mengapa kunci Scroll Lock dinonaktifkan di Cinnamon / Linux / Xorg?

13

Baru-baru ini saya membeli keyboard dengan lampu latar yang dirancang sedemikian rupa sehingga tombol Scroll Lock digunakan untuk menghidupkan kembali lampu belakang. Saya dengan cepat menemukan bahwa Cinnamon tidak merespons dengan benar ketika tombol Scroll Lock ditekan. Awalnya, saya pikir lampu latar keyboard adalah DOA karena semuanya bekerja di luar kotak. Setelah reboot saya menemukan bahwa sebelum meluncurkan Xorg saya berhasil mengubah lampu latar menggunakan tombol Scroll Lock. Kemudian, sekali lagi, setelah memulai Xorg (dan akibatnya cinnamon_session), fungsi ini berhenti berfungsi sekali lagi.

Agar lampu latar berfungsi setelah meluncurkan Xorg, saya terpaksa mengeluarkan: xset led named "Scroll Lock"untuk mengaktifkan dan menonaktifkan fungsi ini.

Setelah sedikit riset saya menemukan sebuah program bernama xevyang membuang informasi acara utama ke terminal setelah dimulai. Setelah menekan tombol Scroll Lock, terminal diisi dengan informasi ini:

Acara KeyPress, serial 34, NO sintetik, jendela 0x2c00001, root 0x2df, subw 0x0, waktu 2609824, (410,0), root: (1724.142), sebutkan 0x0, kode kunci 78 (keysym 0xff14, Scroll_Lock), same_screen YES, XLookupString memberikan 0 byte: XmbLookupString memberikan 0 byte: XFilterEvent mengembalikan: Salah

Acara KeyRelease, serial 37, NO sintetik, jendela 0x2c00001, root 0x2df, subw 0x0, waktu 2609912, (410,0), root: (1724.142), sebutkan 0x0, kode kunci 78 (keysym 0xff14, Scroll_Lock), same_screen YES, XLookupString memberikan 0 byte:

Jadi saya tahu acara utama sedang dikirim ke kernel.

Yang menarik, saya mengamati perilaku aneh ketika berada di terminal (masih sebelum meluncurkan Xorg atau Cinnamon) dan menggunakan Scroll Lock. Yaitu, pada titik ini lampu latar saya berganti-ganti seperti yang diharapkan, tetapi ketika Scroll Lock diaktifkan, tidak ada yang saya ketikkan ditulis ke layar. Setelah menonaktifkan Scroll Lock, semua yang saya tulis segera dibuang ke terminal seolah-olah sebelumnya buffer.

tl; dr Apa masalahnya dengan Scroll Lock dan Xorg?

sherrellbc
sumber
Keberuntungan menyelesaikan masalah ini @sherrellbc?
Pykler

Jawaban:

10

Saya tidak terbiasa dengan Cinnamon, tetapi harus dimungkinkan untuk mengaktifkan kunci Scroll Lock Anda.

Pertama, kita perlu melihat apakah Anda memiliki slot pengubah keyboard cadangan. Lari:

xmodmap -pm

Itu akan mencetak daftar pengaturan pengubah Anda saat ini. Mudah-mudahan, salah satu dari baris itu tidak memiliki kunci terdaftar; umumnya itu akan mod3. Dengan asumsi itu yang terjadi, Anda dapat mengaktifkan Scroll Lock dengan perintah ini:

xmodmap -e "add mod3 = Scroll_Lock"

LED Scroll Lock Anda sekarang seharusnya merespons penekanan tombol Scroll Lock.

Jika berhasil, Anda mungkin ingin X melakukannya secara otomatis setiap kali dimulai. Ada berbagai cara untuk melakukan itu: itu bisa dilakukan berdasarkan per pengguna, tetapi untuk sesuatu seperti ini saya pikir masuk akal untuk itu diatur secara global.

Tapi saya belum pernah melakukan ini sebelumnya, jadi saya lebih baik mengujinya sebelum memberikan rincian lebih lanjut. :)

BAIK. Metode yang saya coba aktifkan bahwa modmap secara global tidak berfungsi untuk saya di KDE. :( Tapi mengaktifkannya di direktori home saya sepertinya berfungsi OK.

Buat file yang disebut .Xmodmapdi direktori home Anda yang berisi baris ini:

add mod3 = Scroll_Lock

Cara termudah untuk melakukannya adalah:

cd ~
echo >.Xmodmap "add mod3 = Scroll_Lock"

Sekarang restart X (logout & login lagi). Semoga kunci Scroll Scroll Anda berfungsi. Jika tidak, beri tahu saya.

PM 2Ring
sumber
Konfigurasi .Xmodmap tidak berfungsi untuk saya di Ubuntu 16.04 / Unity, tetapi solusi permanen dalam jawaban Pykler bekerja :)
Nebel54
7

Menemukan cara permanen setelah malam yang panjang dengan banyak solusi setengah matang.

# backup your symbols file
sudo cp /usr/share/X11/xkb/symbols/us{,.distribution} 

Tambahkan baris berikut di xkb_symbols "basic" {bagian ini. jangan khawatir jika baris kedua itu tidak ada, itu hanya ada untuk beberapa bahasa dan tidak ada untuk kita di sistem saya.

...
    modifier_map Mod3   { Scroll_Lock }; <==<< Add this line

    include "level3(ralt_switch)" <==<< before this line
};

Anda mungkin harus melakukan hal yang sama di tata letak lain jika Anda beralih di antara bahasa

Juga, ada cache tempat layout xkb hidup. Anda harus menghapusnya sebelum memulai ulang server X Anda untuk memeriksa file simbol keyboard yang baru.

sudo rm -f /var/lib/xkb/*
Pykler
sumber
Ini bagus, tetapi hanya bekerja bersama perubahan gsettings dan perubahan xkboptions yang disebutkan di askubuntu.com/a/1067921/274298 untuk saya.
peschü
2

Karena Scroll Lockdapat mengganggu pintasan keyboard Anda saat aktif (dinamai F12, Ctrl+ Spacetidak akan berfungsi seperti yang diharapkan), saya memutuskan untuk mencocokkan Scroll Locktombol dengan peluncuran manual xset, mengubah status LED tentang keadaan sebelumnya.

Saya membuat skrip yang dapat dieksekusi bernama toggle_keyb_led.sh:

xset q | awk '/LED/{ if ($10 ~ "00000000") print "led"; else print "-led" }' | xargs xset

Ini mem-parsing output xset q, cocok dengan baris LED mask.

Catatan 1 : Jika tidak bekerja untuk Anda, harap verifikasi dengan xset -led; xset q | grep 'LED'apa nilai mask saat ini.

Catatan 2 : Beberapa pengguna perlu menjalankan xset led 3untuk mengaktifkan lampu. Dalam hal ini, harap tulis ulang skrip di atas.


Kemudian Anda dapat meluncurkan skrip ini sebagai Pintasan Khusus menggunakan Lingkungan Desktop seperti (di sini menggunakan Cinnamon):

masukkan deskripsi gambar di sini

sequielo
sumber