Vô hiệu hóa đầu vào Bàn phím & Chuột trên unix (dưới X)


28

Làm thế nào một người có thể tạm thời "đóng băng" Bàn phím & Chuột để không ai có thể gây rối với hệ thống?

Có một số khả năng trong đó điều này là hữu ích. Ví dụ, tôi có một máy tính xách tay và tôi muốn đảm bảo không ai sử dụng nó trong khi tôi rời đi, ngay cả khi ai đó biết mật khẩu hoặc có thể đoán nó (như vợ hoặc con), cũng như sự thèm ăn của kẻ trộm (vì nó có vẻ như -Chức năng). hoặc tôi đang làm một cái gì đó từ xa vì vậy tôi muốn đảm bảo rằng người dùng máy tính không làm phiền.


Câu trả lời:


24

Giả sử GUI của bạn dựa trên X (vì hầu hết tất cả các GUI UNIX đều được), hãy sử dụng xinput.

Đầu tiên, liệt kê các thiết bị của bạn:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

Liệt kê chi tiết cho con chuột của bạn (id = 6 trong ví dụ của chúng tôi):

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

Bây giờ hãy vô hiệu hóa nó:

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

Để kích hoạt nó làm:

$ xinput set-int-prop 6 "Device Enabled" 8 1

Điều tương tự cũng xảy ra với bàn phím, chỉ cần thay thế số int-prop bằng id thích hợp.
Đã thử nghiệm và làm việc trên cygwin.

Tất nhiên, bạn phải lập kế hoạch trước về cách bạn sẽ kích hoạt lại thiết bị của mình. chẳng hạn như lên lịch cho cron, bật lại từ xa hoặc vô hiệu hóa chỉ một trong số chúng ở vị trí đầu tiên.


Không có câu trả lời khác ở đây trả lời câu hỏi.
Philomath

Trong trường hợp của tôi, lệnh vô hiệu hóa chuột trông như thế này: xinput set-int-prop 9 "Device Enabled" 8 0- chỉ, 1) Tôi cũng muốn ẩn con trỏ chuột và 2) nếu tôi đi từ X đến tty (bảng điều khiển Linux / VT) và sau đó quay lại X, đây là thiết lập lại ( xinput list-props 9xác nhận điều này).
Emanuel Berg

Tôi có thể tắt thiết bị "con trỏ chính" không?
ed22

14

xinput --set-int-propbị phản đối Bạn nên sử dụng --set-propthay thế. Ngoài ra, xinput --enable [device]xinput --disable [device]có thể được sử dụng để bật và tắt các thiết bị tương ứng.

Đây là tập lệnh shell tôi sử dụng để bật, tắt và chuyển bàn di chuột của máy tính xách tay của tôi:

#!/bin/bash
# Enables, disables, or toggles device

device='AlpsPS/2 ALPS GlidePoint'
if [[ $1 == -e ]] ; then
    # Enable
    #xinput --set-prop "$device" "Device Enabled" 1
    xinput --enable "$device"
elif [[ $1 == -d ]] ; then
    # Disable
    #xinput --set-prop "$device" "Device Enabled" 0
    xinput --disable "$device"
elif [[ $1 == -t ]] ; then
    # Toggle
    if [[ $(xinput list-props "$device" |
       grep "Device Enabled") == *:*1 ]] ; then
           #xinput --set-prop "$device" "Device Enabled" 0
           xinput --disable "$device"
    else
        #xinput --set-prop "$device" "Device Enabled" 1
        xinput --enable "$device"
    fi
else
    echo "usage: $0 [-edt]"
fi

Kiểm tra bình luận của tôi để bài viết của Philomath. Tôi đã có cùng một vấn đề cho xinput --disable 9.
Emanuel Berg

6

Câu hỏi được trả lời bằng cách sử dụng xinput là câu hỏi đúng, nhưng đây là một câu hỏi nhanh nếu tất cả những gì bạn đang tìm kiếm là một loại khóa bảo vệ màn hình đơn giản. Tôi đã viết lại điều này vào những năm 90 và tất cả những gì nó làm là ăn các sự kiện bàn phím và chuột của máy chủ X, cho đến khi bạn nhập mật khẩu. Không có phản hồi nào ngoài việc thoát khi bạn nhập chính xác.

http://ishiboo.com/~danny/Projects/xl/

Tôi sử dụng nó như một khóa màn hình, chính xác như cách bạn muốn sử dụng nó.


Tôi đã bình chọn cho nó vì đây là loại giải pháp tôi muốn, nhưng nó không hoạt động với tôi trên Linux với mật khẩu bóng. Một tiến trình phải được root để truy cập / etc / bóng và các hàm liên quan, nhưng tôi muốn chạy xl với tư cách là người dùng không root. Trường hợp sử dụng của tôi: khi chúng tôi xem chương trình trên máy tính, con gái nhỏ của tôi thích bash trên bàn phím! xscreenaver không hữu ích cho việc này
Sam Watkins

Câu trả lời của bạn là một ví dụ tuyệt vời về lập trình "vô dụng" hoặc unix "làm một việc và làm tốt" ... ngoại trừ việc nó không hiệu quả với tôi (với mật khẩu bóng!) Đối với trường hợp sử dụng của tôi, tôi rất vui khi làm việc chăm chỉ -code mật khẩu, vậy là được. Bây giờ hãy dạy tôi cách tắt nút nguồn, đó là nút yêu thích của con tôi!
Sam Watkins

Tại sao bạn không muốn root? Tại sao không kiện nhị phân xl?
Danny Dulai

BTW, bạn có thể chỉ định mật khẩu trên dòng lệnh hoặc thông qua một biến môi trường ngay bây giờ.
Daniel Dulai

Có thể ăn các sự kiện đầu vào X với bộ công cụ X tiêu chuẩn và tập lệnh shell?
Alexander Shcheblikin

2

Câu trả lời của bạn có lẽ là tốt nhất cho trường hợp sử dụng thứ hai của bạn (làm điều gì đó từ xa), nhưng có lẽ không phải cho lần đầu tiên của bạn (cách xa bàn phím). Làm thế nào bạn sẽ chạy xinput một lần nữa để khôi phục quyền truy cập khi bạn quay trở lại?

Giải pháp tiêu chuẩn để khóa hệ thống trong khi cách xa nó là XScreenSaver , được cài đặt theo mặc định trong hầu hết các bản phát hành. Nếu được cấu hình để khóa bàn phím, nó sẽ nhắc nhập mật khẩu của bạn trước khi mở khóa.


Tôi đã cập nhật.
Philomath

2

Ít nhất là trên các hệ thống dựa trên Debian như Ubuntu, có một tiện ích được gọi là xtrlock (1)có sẵn thông qua các kho lưu trữ gói.

Tiện ích này khóa bàn phím và chuột cho đến khi mật khẩu được nhập trong khi hiển thị các cửa sổ. Tôi thấy nó hữu ích cho các máy tính chạy hiển thị thông tin và tương tự.


Đây có vẻ như là tùy chọn đơn giản và nhẹ nhất, và nó cũng xuất hiện từ giữa những năm 90. Một vấn đề là tôi không nghĩ rằng có thể ẩn hình ảnh con trỏ bị khóa, điều này làm cho điều này không thể sử dụng cho các biển báo, thật không may.
aexl

1

Tùy thuộc vào phần cứng của bạn, bạn có thể loại bỏ các mô-đun, kiểm soát phần cứng của bạn. Tôi có một tập lệnh như vậy touchpadtoggle, để bật và tắt bàn di chuột của tôi.

lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse

Nhưng bàn phím dường như không có mô-đun liên quan và mô-đun psmouse đôi khi sẽ chỉ hoạt động.


1

Nếu bạn đang sử dụng Môi trường máy tính để bàn hoặc trình quản lý đăng nhập, (Gnome, KDE, XFCE, LXDE), hầu hết tất cả chúng đều có chức năng khóa màn hình trong đó bạn phải nhập mật khẩu để quay lại chương trình của mình.

Tuy nhiên vì điều đó thực sự đơn giản nên tôi cảm thấy vấn đề của bạn phức tạp / khác biệt hơn.


Tôi đã cập nhật.
Philomath

1

Tôi đã viết cái này (trong .zshrc, nhưng cũng nên làm việc .bashrc) để làm điều này, với sự giúp đỡ của các câu trả lời ở trên. Để làm tương ứng với bàn phím, thay đổi tham số trong grep Mouse.

setmouse () {
 xinput \
  $1 \
  `xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }

Kiểm tra câu trả lời của tôi cho một câu hỏi tương tự trên SO - nó cũng tương tự, nhưng có thể được gọi từ một tty, và, nó cũng (sử dụng một cách giải quyết) ẩn con trỏ.
Emanuel Berg
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.