Tetap aktifkan NumLock

8

Saya sudah melepas tutup tombol Num Lock secara fisik, jadi saya tidak sengaja menekannya (saya menggunakan keyboard yang sangat ringkas). Tapi saya mengerti ada bug di xorg yang offmengaktifkan Num Lock ketika saya mengganti tata letak keyboard.

Jadi saya memerlukan sesuatu yang bisa mencegah Num Lock "mati" sama sekali, atau sebagai alternatif (mungkin lebih mudah?) Memantau status Num Lock dan menyalakannya "segera" begitu pemberitahuan bahwa "mati".

Berikut ini adalah jawaban Unix yang sepertinya membahas hal ini, tetapi untuk LXDE. Apa yang harus saya lakukan untuk membuat ide ini berfungsi di Ubuntu 15.04 dan Unity?

Saya tidak tahu bagaimana memonitor atau menanyakan status Num Lock, atau bagaimana secara terprogram mengubah status Num Lock, tetapi di sini ada solusi yang menggunakan skrip sederhana yang berjalan sepanjang waktu. Kedengarannya seperti itu akan berhasil tetapi saya tidak yakin itu pintar untuk menjalankan itu sepanjang waktu?

Torben Gundtofte-Bruun
sumber

Jawaban:

9

Yang terbersih tentu saja akan memperbaiki bug, tetapi sebagai solusi, skrip latar belakang di bawah ini akan melakukan pekerjaan:

#!/usr/bin/env python3
import subprocess
import time

key = "org.gnome.settings-daemon.peripherals.keyboard numlock-state"
while True:
    time.sleep(1)
    state = subprocess.check_output([
        "/bin/bash", "-c", "gsettings get "+key]).decode("utf-8").strip()
    if state != "'on'":
        subprocess.Popen([
            "/bin/bash", "-c", "gsettings set "+key+" 'on'"])

Cara Penggunaan

  • Salin skrip di atas ke dalam file kosong, simpan sebagai NM_on.py
  • Tes-jalankan di latar belakang dengan perintah:

    python3 /path/to/NM_on.py
    
  • Jika semua berfungsi dengan baik, tambahkan ke Aplikasi Startup: Dash> Startup Applications> Add, tambahkan perintah:

    /bin/bash -c "sleep 10 && python3 /path/to/NM_on.py"
    

Penjelasan

Kita bisa mendapatkan status saat ini Num Lockdalam lebih dari satu cara:

  • menjalankan perintah:

    xset q
    

    yang akan memberikan output seperti:

    Keyboard Control:
      auto repeat:  on    key click percent:  0    LED mask:  00000000
      XKB indicators:
        00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
        03: Compose:     off    04: Kana:        off    05: Sleep:       off
        06: Suspend:     off    07: Mute:        off    08: Misc:        off
        09: Mail:        off    10: Charging:    off    11: Shift Lock:  off
        12: Group 2:     off    13: Mouse Keys:  off
      auto repeat delay:  500    repeat rate:  33
    .....
    

    atau dengan perintah:

    gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
    

    yang hanya mengembalikan 'on', 'off'atau 'unknown'.

    Karena yang terakhir ini sangat ringan, kami bisa menggunakannya dalam skrip latar belakang untuk memeriksa sekali per detik, dan mengatur nilainya ke 'on', jika perlu, dengan perintah:

    gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
    

dan begitulah ...


Edit

Untuk beberapa alasan, saya melewatkan paragraf terakhir Anda, di mana Anda merujuk ke jawaban lain dengan solusi yang serupa.

Secara teoritis murni, saya selalu memiliki masalah dengan skrip yang secara buta (kembali) menerapkan pengaturan, tanpa memeriksa keadaan saat ini. Ada bisa menjadi argumen untuk melakukannya, jika perintah

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

untuk mendapatkan nilai saat ini, akan lebih menuntut yang cukup dijalankan

numlockx on

untuk (kembali) diatur numlockx on .
Melihat pada saat kedua perintah harus selesai (yang setidaknya merupakan indikasi) namun sebaliknya; perintah

gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state

tampaknya lebih "ringan".

Menjalankan skrip latar belakang ide yang buruk?

Tentu saja, jika Anda tidak memiliki alasan untuk menjalankan skrip latar belakang, maka jangan lakukan. Pada saat yang sama, jika skrip latar belakang ditulis dengan baik, diuji dengan saksama, prosedur dioptimalkan dengan cerdas, dan jika itu tidak menambah efek yang terlihat pada pekerjaan prosesor, akan konyol untuk tidak digunakan sebagai solusi jika itu menambah penting fungsionalitas atau menghemat waktu Anda.

Saya selalu memiliki setidaknya 4-8 skrip latar belakang berjalan. Sebagian besar dari mereka selama berminggu - minggu tanpa restart. Tidak pernah melihat efek apa pun, pada sistem lansia saya. Ingatlah bahwa sistem Anda menjalankan banyak loop.

Yakub Vlijm
sumber
Ini brilian - dan dijelaskan dengan luar biasa. Terima kasih banyak!
Torben Gundtofte-Bruun
@ TorbenGundtofte-Bruun Sama-sama! Jika jawabannya adalah apa yang Anda cari, apakah Anda akan mempertimbangkan menerimanya?
Jacob Vlijm
2
Tentu, saya hanya ingin mengimplementasikan dan mengujinya terlebih dahulu :-) dan sekarang ini merupakan bagian dari buku masak saya untuk instalasi di masa depan.
Torben Gundtofte-Bruun
Dengan Num Lock saya mati, gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-statemasih kembali 'on'.
Rodrigo