Luôn bật NumLock


29

Tôi có bàn phím tiêu chuẩn với các phím số ở bên phải (tôi đoán nó được gọi là bàn phím 104 phím). Tôi muốn sử dụng các phím số chỉ là các phím số. Điều đó có nghĩa là, tôi không muốn NumLockbật và tắt các phím số.

Tuy nhiên, đôi khi điều đó xảy ra (tôi không biết làm thế nào, có lẽ do tôi vô tình nhấn NumLockphím) rằng numlock bị tắt và tôi phải nhấn lại. Điều này là vô cùng khó chịu.

Có thể vô hiệu hóa tắt numlock?

Nói cách khác: Tôi muốn các phím số của mình luôn đóng vai trò là các phím số và tắt công tắc numlock .

Tôi đang sử dụng Debian và LXDE (Openbox).



@MartinVegter Bạn có muốn đăng ở đây nội dung của ~/.config/openbox/autostart~/.config/openbox/rc.xml?
Risto Salminen

Cần một sự kiện, nó sẽ kích hoạt lại Numlock nếu phát hiện ra numlock đó đang BẬT. Vô hiệu hóa numlock là dễ dàng như được đề cập bởi xmodmap. Câu hỏi duy nhất còn lại là làm thế nào để có được sự kiện đó ......?
SHW

Câu trả lời:


7

Sau khi đọc tất cả các câu trả lời ở đây, tôi khá ngạc nhiên khi thấy rằng bạn có thể làm như sau.

<keybind key="Num_Lock">
  <action name="Execute">
    <command>numlockx on</command>
  </action>
</keybind>

Vì vậy, mỗi khi bạn nhấn Num, sẽ tắt numlock. Nó sẽ thực thi numlockx on, kích hoạt lại numlock.

Tên đến từ đầu ra của xevtôi đã cho tôi mã khóa 77 và tênNum_Lock

Trong trường hợp @MartinVegters, anh ta cần đợi vài giây để numlockx onchắc chắn được thực thi sau khi sự kiện Numđược xử lý. Vì có một điều kiện chạy đua giữa việc xử lý numlock trong kernel và thực thi numlockx.

Trong trường hợp này, bạn có thể viết một tập lệnh nhỏ denumlock.shnhư

#!/bin/sh

sleep "$1"
numlockx on

và sử dụng nó trong liên kết khóa

<command>/bin/sh denumlock.sh 1</command>

Điều này là bẩn nhưng nó hoạt động.

Những gì tôi khuyên là sau đây tôi không thể tự kiểm tra. Bạn tốt hơn nên làm theo các câu trả lời đầu tiên mà đề nghị sử dụng

xmodmap -e 'keycode 77 = Escape'

Nhưng đối với LXDE, bạn cần sử dụng cơ chế tự khởi động LXDE khác với cách chỉnh sửa Openbox ~/.config/openbox/autostart.

Trong LXDE, rõ ràng bạn cần chỉnh sửa ~/.config/lxsession/LXDE/autostarthoặc với Lubfox ~/.config/lxsession/Lubuntu/autostart, nơi chứa các lệnh để khởi động. (Xem tài liệu Archtài liệu LXDE ) Bạn có thể cần tạo tệp đó và thêm dòng này.

@xmodmap -e 'keycode 77 = Escape'

Đáng buồn thay, như tôi đã nói tôi không thể kiểm tra nếu điều này hoạt động, vì tôi chỉ có một VM chạy với LXDE.


1
Tôi đã thử giải pháp của bạn <keybind key="Num_Lock">nhưng tiếc là nó không hoạt động. Trong khi lệnh numlockx onđược thực thi, <kbd> NumLock </ kbd> vẫn bán lẻ chức năng của nó dưới dạng numlock. Vì vậy, tôi vẫn có thể bật / tắt numlock.
Martin Vegter

Đối với giải pháp khác, bằng cách sử dụng xmodmap, khi tôi thử giải pháp được đề xuất bởi Risto Salminen, lệnh đã hoạt động, nhưng tôi đã mất tất cả các ràng buộc chính của mình.
Martin Vegter

@MartinVegter Mhh bạn có thể thử một sleep 3; numlockx onliên kết chính. Đối với giải pháp thứ hai, bạn đã thử nó với autostart chưa?
Raphael AhDR

Tôi không hiểu tại sao, nhưng thậm chí sleep 3; /usr/bin/numlockx onkhông hoạt động. NumLockvẫn hoạt động như một công tắc bật / tắt.
Martin Vegter

@MartinVegter không /usr/bin/numlockx onhoạt động trên hệ thống của bạn?
Raphael AhDR

13

có lẽ do tôi vô tình nhấn NumLockphím

Nếu bàn phím là của bạn (chứ không phải là chủ nhân của bạn), chỉ cần loại bỏ nó khỏi bàn phím .

Bạn vẫn có thể nhấn nó với một điều nhọn nếu bạn thực sự cần.

nhập mô tả hình ảnh ở đây


4
Vâng, +1. Đơn giản là thanh lịch.
ypercubeᵀᴹ

1
thật đáng buồn khi trạng thái mặc định NumLuck của tôi là sai :(
MichaelChirico

6

Trên bàn phím máy tính xách tay của tôi (Ubuntu 10.04) hiện đang khóa.

$ xmodmap -pke|grep 77
keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys
keycode 177 = XF86Phone NoSymbol XF86Phone
$ xmodmap -e "keycode 77 ="

Voila! numlock hiện đã bị vô hiệu hóa.

xmodmap -e "keycode  77 = Num_Lock Pointer_EnableKeys Num_Lock Pointer_EnableKeys"

Đưa nó trở lại một lần nữa. (Có thể greping cho Num_lock sẽ là một ý tưởng tốt hơn, nhưng bạn có ý chính).

Trả lời bình luận của @Martin Vegter.

Ok , trả lời bình luận của bạn xmodmap làm hỏng các ràng buộc của bạn, hiểu.

Tôi vừa kiểm tra Tài liệu Openbox

Hãy xem trong ~ / .config / openbox / lxde-rc.xml

ls -l lxde-rc.xml (bạn có một RC.xml không? Vui lòng kiểm tra).

lấy một bản sao của nó để sao lưu

(sử dụng trình chỉnh sửa) tìm kiếm numlock (có thể là nmlk).

Bạn có thấy một cái gì đó như thế này?

<keybind key="Numlock">
<action name="whatEverItSays"/>
</keybind>

Nhận xét nó HOẶC thay đổi Giá trị khóa phím thành giá trị thay thế, ví dụ Alt-Numlock để chuyển đổi

key="A-Numlock"

Ví dụ

Để bình luận

<!-Commented out from here
    <keybind key="Numlock">
    <action name="whatEverItSays"/>
    </keybind>
To Here -->

hoặc là

Thay đổi để chuyển đổi Alt + Numlock

<keybind key="A-Numlock">
  <action name="whatEverItSays"/>
</keybind>

lưu các thay đổi và đăng xuất / đăng nhập hoặc khởi động lại.


Vấn đề là, bất kỳ xmodmaplệnh nào (tức là xmodmap -e 'keycode 77 = Escape') sẽ phá hủy các ràng buộc khóa hiện tại của tôi được xác định trong.config/openbox/lxde-rc.xml
Martin Vegter

1
Tôi đã trả lời ở trên để có được định dạng tốt hơn.
X Tian

Cảm ơn vì đã trả lời. Tuy nhiên, trong tôi .config/openbox/lxde-rc.xml, không có dòng chứa Numlockhoặc Num_Lock. Khi tôi tạo một cái, nó không có tác dụng: <keybind key = "Num_Lock"> <action name = "Thực thi"> <lệnh> / bin / true </ lệnh> </ action> </ keybind>
Martin Vegter

1
Phải có một tệp cấu hình khác được đọc trước tệp trong thư mục chính của bạn. hai nơi tôi đề nghị tìm kiếm, / etc / xdg / openbox và / usr / share / ... Nếu đây không phải là trợ giúp, tôi sẽ cần phải từ bỏ - xin lỗi.
X Tian

từ 3.4.7 đã thay đổi nhật ký (openbox) "Khắc phục các ràng buộc khóa bị mất nếu không thể dịch được nhiều ràng buộc ở cùng cấp độ (Sửa VMWare khiến các phím tắt của Openbox ngừng hoạt động)"
X Tian

5

Tìm mã khóa numlock của bạn với xev. Ví dụ: ở đây, Num_Lock là 77.

Sử dụng xmodmap để ánh xạ lại mã khóa:

  • Đối với các phiên X hiện tại, bên trong một vỏ, sử dụng xmodmap -e 'keycode 77 = '.
  • Để tất cả các phiên X trong tương lai, bên trong ~/.xprofilevị trí xmodmap -e 'keycode 77 = '.

    EDIT: Lưu ý: Không hoạt động nếu phần mềm đang thay đổi trạng thái Num Lock.


1
Lệnh này xmodmap -e 'keycode 77 = 'hoạt động, nhưng nó gây ra một vấn đề nghiêm trọng: tất cả các ràng buộc khóa của tôi ngừng hoạt động
Martin Vegter

Chà, bạn có thể cố gắng ánh xạ nó tới một khóa hợp lệ, vô hại. Giống như xmodmap -e 'keycode 77 = Escape'(YMMV, ESC có vẻ an toàn đối với tôi). Bạn có tệp ~ / .Xmodmap không? Nếu có, thay vì ~/.xprofile, đặt keycode 77 = Escapeở cuối tập tin này.
emp.justine

1
Vấn đề là, bất kỳ xmodmaplệnh nào (tức là xmodmap -e 'keycode 77 = Escape') sẽ phá hủy các ràng buộc khóa hiện tại của tôi được xác định trong.config/openbox/lxde-rc.xml
Martin Vegter

4

Chỉ cần xóa ánh xạ khóa NumLock bằng cách ánh xạ nó thành không có gì: trước tiên hãy chạy xevvà nhấn Num Lock (nó có thể sẽ in 77), sau đó chạy lệnh:

xmodmap -e "keycode # = """

Trong đó # là mã khóa của NumLock.

Bạn cũng sẽ đặt cái này ~/.xprofileđể tắt NumLock trong x phiên.


Trong trường hợp câu hỏi ban đầu của tôi không rõ ràng: tôi không muốn tắt numlock. Tôi muốn điều ngược lại. Tôi muốn đảm bảo rằng nó không thể bị tắt (tôi luôn bật numlock)
Martin Vegter

Ah, tôi rõ ràng có một lỗi trong suy nghĩ của tôi, cảm ơn vì đã cho tôi biết. :) Tôi sẽ xem nếu tôi có thể cải thiện câu trả lời của tôi.
Risto Salminen

điều này không ảnh hưởng gì đến hệ thống của tôi:xmodmap -e "remove Lock = Num_Lock"
Martin Vegter 7/11/2016

Bây giờ lệnh hoạt động, nhưng nó phá hủy tất cả các ràng buộc khóa của tôi. Tất cả các ràng buộc chính ngừng hoạt động.
Martin Vegter

Vâng, nó không nên, theo câu trả lời này trên superuser .
Risto Salminen

4

pic của các tùy chọn bàn phímvới LinuxMint 17.2 và tôi tưởng tượng các phiên bản Ubuntu khác, bạn có thể vào cài đặt KEYBOARD của mình và sau đó LAYOUTS trên trang đó bạn sẽ tìm thấy một nút "tùy chọn" nhỏ.

Từ đó chuyển đến "tùy chọn tương thích linh tinh" và kiểm tra "các phím số luôn nhập chữ số"

Đây là một cứu cánh cho tôi. Nó khiến tôi phải gõ một số và di chuyển đến một nơi khác trên trang. Chúc mừng! ;)


1
Câu trả lời này nên có nhiều điểm hơn!
Carlos Gant

Điều này có thể được thực hiện cũng từ dòng lệnh bằng cách setxkbmap -option numpad:machoặc bằng cách thiết lập Option "XkbOptions" "numpad:mac"trong xorg.conf.
j123b567

2

Các câu trả lời khác ở đây được đề xuất sử dụng numlockx onvới xmodmap -e 'keycode 77 =', nhưng numlockx onsẽ không hoạt động trên hệ thống của tôi cùng với xmodmaplệnh đó , hiển thị cho tôi một thông báo lỗi:

$ numlockx on
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  132 (XTEST)
  Minor opcode of failed request:  2 (X_XTestFakeInput)
  Value in failed request:  0x0
  Serial number of failed request:  17
  Current serial number in output stream:  20

Và cũng thiết lập xmodmap -e 'keycode 77 ='vì một số lý do sẽ loại bỏ tất cả các keybindings của tôi được thực hiện với xbindkeys.

Câu trả lời này cho một câu hỏi tương tự đã giúp tôi, tuy nhiên. Một phần của tôi ~/.xinitrc:

numlockx on
xmodmap -e 'keycode 77 = NoSymbol Num_Lock'

Bằng cách này, NumLock không làm gì cả, nhưng nếu được nhấn bằng Shift, nó phục vụ mục đích ban đầu (chủ yếu là vô dụng) và quan trọng nhất là nó không ngăn cản hoạt numlockx onđộng trên hệ thống của tôi hoặc làm rối xbindkeyscác ràng buộc chính của tôi .


1

Một cách khác, nếu bạn muốn vô hiệu hóa numlockkhóa vĩnh viễn. Bạn có thể làm như vậy bằng cách sửa đổi tệp sơ đồ bàn phím hiện tại của mình bằng cách sửa đổi mã khóa 77.

Đặt giá trị này thành "không", để nhấn phím vô tình sẽ không làm gì.

Sử dụng numlockxlúc khởi động để khởi động nó và sử dụng tệp sơ đồ bàn phím đã sửa đổi trong một trong các tập lệnh bắt đầu, ví dụ ~/.bashrchoặc trong /etc/profile.

LƯU Ý: Tôi chưa thử nghiệm cái này, nhưng nó sẽ hoạt động.


1

Trên OpenSuse 13.x với KDE, điều này hiệu quả với tôi:

  • cài đặt numlockx
  • Thêm phím tắt tùy chỉnh:
    • Phím tắt tùy chỉnh -> Chỉnh sửa -> Mới -> Phím tắt toàn cầu -> Lệnh / URL:
    • Tên hành động: NumLockOn
    • Nhận xét: Giữ numlock trên
    • Kích hoạt: được đặt thành NumLockk
    • Hành động-> Lệnh / URL: sh -c 'ngủ 0,5; numlockx trên'
    • Lượt áp dụng
    • (làm xong)

Nếu NumLock cần được bật vì nó tắt, chỉ cần sử dụng % numlockx on.


Đây là những gì tôi cần. Làm việc trên Xubfox 16.04.
kodmanyagha


0

Nó có thể không phải là giải pháp tốt nhất, nhưng điều này hiệu quả với tôi:

stdbuf -oL xinput test 11 | mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}' | bash

Trong đó 11 là id của bàn phím của bạn. Tạo một xinputdanh sách để xác định id bàn phím của bạn (trong trường hợp của tôi là 11):

user@host:~$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DualPoint Stick                           id=12   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Sony Vaio Keys                            id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ USB 2.0 Camera                            id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

Rõ ràng, numlockxphải được cài đặt để làm việc đó.

Giải trình:

  • stdbuf -oL Sửa đổi các hoạt động đệm của luồng đầu ra thành bộ đệm dòng
  • xinput test 11 in các phím được nhấn vào thiết bị xuất chuẩn
  • mawk -W interactive '$3==77 {printf "/usr/bin/numlockx on\n"}'đối với mỗi dòng được in và chứa 77 (phím numlock), hãy tạo một lệnh /usr/bin/numlockx on...
  • | bash ... và đặt nó vào bash để thực thi nó.

Bạn có thể chèn oneliner này vào một trong các kịch bản ban đầu của môi trường máy tính để bàn hoặc chạy nó trong nền.


0

Tôi cũng muốn các phím số của bàn phím số luôn là số, không phải là công cụ KP _....

Giải pháp của tôi là một phần trong Bàn phím Apple Remeting của tôi để sử dụng với repo Linux .

Về cơ bản, nó chỉ nhắc lại Num_Lock là F20 và các số là chính chúng.

Giải pháp này luôn cung cấp kết quả mong muốn và một phím chức năng bổ sung là lợi ích bên lề.


-1

Tạo tập lệnh sau và làm cho nó có thể thực thi được với chmod +x <filename>

#!/bin/bash
if [ -x /usr/bin/numlockx ];then
/usr/bin/numlockx on
fi

Đặt đường dẫn tệp vào .config/openbox/autostart

Hoặc đặt nó như một công việc định kỳ kiểm tra vài phút một lần và chạy tập lệnh nếu numlocks bị tắt.

crontab -e 
*/1 * * * * <path-to-file>

Hoặc chỉ chạy tập lệnh trong một vòng lặp.

#!/bin/bash
  x=0
  while [ x -eq 0 ];do
    if [ -x /usr/bin/numlockx ];then
    /usr/bin/numlockx on
    fi
  done

Nếu bạn không có numlockx, bạn sẽ có thể lấy nó với sudo apt-get install numlockx


Không, đây chắc chắn không phải là một giải pháp tốt. Xin lỗi
Martin Vegter

1
Bạn có thể giải thích tại sao không?
Jeight

1
Vâng, bởi vì nó là một cách giải quyết rất bẩn. Nó không khắc phục vấn đề tiềm ẩn, nó chỉ quét các triệu chứng dưới thảm.
Martin Vegter

Thật không may, nếu xmodmap không hoạt động, bạn thực sự không có bất kỳ tùy chọn nào khác. Viết một kịch bản để kiểm tra và kích hoạt numlock, không quét vấn đề dưới tấm thảm. Hãy nghĩ về nó như là một kiểm tra và cân bằng cho ngón tay béo. Không có tác dụng phụ và kịch bản có thể dễ dàng dừng / bắt đầu bất cứ lúc nào. Nó thực sự không phải là một cách giải quyết. Tôi đã thấy điều tồi tệ hơn nhiều được thực hiện trong mã nguồn thực tế của các chương trình mà bạn sử dụng hàng ngày.
Jeight

Làm thế nào bạn có thể chắc chắn, tôi không có lựa chọn khác?
Martin Vegter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.