Tất nhiên, sạch nhất sẽ là sửa lỗi, nhưng như một cách giải quyết, tập lệnh nền bên dưới sẽ thực hiện công việc:
#!/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'"])
Cách sử dụng
- Sao chép tập lệnh ở trên vào một tệp trống, lưu nó dưới dạng
NM_on.py
Chạy thử nó trong nền với lệnh:
python3 /path/to/NM_on.py
Nếu tất cả đều hoạt động tốt, hãy thêm nó vào Ứng dụng khởi động: Dash> Ứng dụng khởi động> Thêm, thêm lệnh:
/bin/bash -c "sleep 10 && python3 /path/to/NM_on.py"
Giải trình
Chúng ta có thể có được Num Lock
trạng thái hiện tại theo nhiều cách:
chạy lệnh:
xset q
sẽ cung cấp một đầu ra như:
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
.....
hoặc với lệnh:
gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
mà chỉ đơn giản là trả về 'on'
, 'off'
hoặc 'unknown'
.
Vì cái sau có trọng lượng cực kỳ nhẹ, chúng tôi rất có thể sử dụng nó trong tập lệnh nền để kiểm tra một lần mỗi giây và đặt giá trị thành 'on'
, nếu cần, bằng lệnh:
gsettings set org.gnome.settings-daemon.peripherals.keyboard numlock-state 'on'
và vì vậy nó ...
Biên tập
Vì một số lý do, tôi đã bỏ lỡ đoạn cuối cùng của bạn, trong đó bạn đề cập đến một câu trả lời khác với một giải pháp tương tự.
Về mặt lý thuyết, tôi luôn gặp vấn đề với các tập lệnh áp dụng các cài đặt một cách mù quáng mà không kiểm tra trạng thái hiện tại. Có thể có một đối số để làm như vậy, nếu lệnh
gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
để có được giá trị hiện tại, sẽ đòi hỏi nhiều hơn mà chỉ cần chạy
numlockx on
để (lại) bộ numlockx on
.
Nhìn vào thời gian cả hai lệnh cần kết thúc (ít nhất là một dấu hiệu), tuy nhiên, đó là cách khác; lệnh
gsettings get org.gnome.settings-daemon.peripherals.keyboard numlock-state
dường như là "trọng lượng nhẹ" hơn.
Chạy một kịch bản nền một ý tưởng tồi?
Tất nhiên, nếu bạn không có lý do để chạy một kịch bản nền, thì đừng. Đồng thời, nếu một kịch bản nền được viết tốt, được kiểm tra kỹ lưỡng, các quy trình được tối ưu hóa một cách thông minh và nếu nó không thêm bất kỳ hiệu ứng đáng chú ý nào vào nghề nghiệp của bộ xử lý, thì thật ngu ngốc nếu không sử dụng như một cách giải quyết nếu nó thêm quan trọng chức năng hoặc giúp bạn tiết kiệm thời gian.
Tôi liên tục có ít nhất 4-8 tập lệnh nền đang chạy. Hầu hết trong số họ trong nhiều tuần mà không cần khởi động lại. Không bao giờ nhận thấy bất kỳ ảnh hưởng, trên (các) hệ thống cũ của tôi. Hãy nhớ rằng hệ thống của bạn đang chạy rất nhiều vòng.