Unix에서 키보드 및 마우스 입력 비활성화 (X 아래)


28

키보드와 마우스를 어떻게 프로그램 적으로 "고정"하여 아무도 시스템을 망칠 수 없습니까?

이것이 유용한 몇 가지 가능성이 있습니다. 예를 들어, 나는 노트북을 가지고 있는데 누군가 암호를 알고 있거나 (아내 나 어린이와 같이) 추측 할 수 있지만 도둑의 식욕을 잃어 버리는 경우에도 누군가가 암호를 알고 있는지 확인하고 싶습니다. -작동). 또는 원격으로 무언가를하고있어서 컴퓨터 사용자가 방해받지 않도록하고 싶습니다.


답변:


24

GUI가 X 기반이라고 가정하면 (거의 모든 UNIX GUI가 그러 하듯이)을 사용하십시오 xinput.

먼저 장치를 나열하십시오.

$ 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)]

마우스 세부 사항을 나열하십시오 (이 예에서는 id = 6).

$ 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

이제 비활성화하십시오.

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

그것을 가능하게하려면 :

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

키보드도 마찬가지입니다. int-prop 번호를 적절한 id로 바꾸십시오.
cygwin에서 테스트하고 작업했습니다.

물론 장치를 다시 활성화하는 방법을 미리 계획해야합니다. cron에서 일정을 예약하거나 원격으로 다시 사용하도록 설정하거나 그 중 하나만 비활성화합니다.


여기에 다른 대답은 질문에 대답하지 않습니다.
Philomath

필자의 경우 마우스 비활성화 명령은 다음과 같습니다 xinput set-int-prop 9 "Device Enabled" 8 0.-전용, 1) 마우스 포인터도 숨기고 싶습니다 .2) X에서 tty (Linux 콘솔 / VT)로 이동하면, 그런 다음 X로 돌아 가면 재설정됩니다 ( xinput list-props 9확인).
Emanuel Berg

"마스터 포인터"장치를 비활성화 할 수 있습니까?
ed22

14

xinput --set-int-prop더 이상 사용되지 않습니다. --set-prop대신 사용해야 합니다. 또한, xinput --enable [device]xinput --disable [device]활성화 각각 해제 장치를 사용할 수 있습니다.

다음은 노트북의 터치 패드를 활성화, 비활성화 및 전환하는 데 사용하는 쉘 스크립트입니다.

#!/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

Philomath의 게시물에 대한 나의 의견을 확인하십시오. 에 대해 동일한 문제가 xinput --disable 9있습니다.
Emanuel Berg

6

xinput을 사용하여 답변 한 질문이 맞지만 여기에 간단한 화면 보호기 유형 잠금 장치가 있다면 빠른 질문입니다. 나는 이것을 90 년대에 다시 썼고 암호를 입력 할 때까지 X 서버의 키보드 및 마우스 이벤트를 먹는 것뿐입니다. 올바르게 입력하면 종료 이외의 다른 의견은 없습니다.

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

나는 그것을 정확히 어떻게 사용하고 싶은지 화면 잠금으로 사용합니다.


내가 원하는 종류의 솔루션이므로 이것을 투표했지만 그림자 암호가있는 Linux에서는 작동하지 않습니다. / etc / shadow 및 관련 함수에 액세스하려면 프로세스가 루트 여야하지만 루트가 아닌 사용자로 xl을 실행하고 싶습니다. 나의 유스 케이스 : 우리가 컴퓨터에서 쇼를 볼 때, 내 딸은 키보드를 강타하는 것을 좋아한다! xscreensaver는 이것에 도움이되지 않습니다
Sam Watkins

귀하의 답변은 "무익한"또는 유닉스 프로그래밍 "한 가지 일을 잘 수행하십시오"의 훌륭한 예입니다 ... 쉐도우 암호로 작동하지 않는다는 점을 제외하고는 사용하지 않습니다. 암호를 입력하면 괜찮습니다. 이제 전원 버튼을 비활성화하는 방법을 가르쳐주세요. 이것이 제 아기가 가장 좋아하는 버튼입니다!
Sam Watkins

왜 루트를 원하지 않습니까? 왜 xl 바이너리를 suid하지 않습니까?
Danny Dulai

BTW, 명령 행 또는 환경 변수를 통해 비밀번호를 지정할 수 있습니다.
Danny Dulai

표준 X 툴셋과 쉘 스크립트를 사용하여 X 입력 이벤트를 먹을 수 있습니까?
Alexander Shcheblikin

2

답은 아마도 두 번째 유스 케이스 (원격으로 수행)에 가장 적합하지만 첫 번째 (키보드에서 멀어짐)에는 적합하지 않습니다. 돌아올 때 어떻게 xinput을 다시 실행하여 액세스를 복원 하시겠습니까?

시스템과 떨어져있는 동안 시스템을 잠그는 표준 솔루션은 XScreenSaver 이며 대부분의 배포판에 기본적으로 설치됩니다. 키보드를 잠그도록 구성된 경우 잠금을 해제하기 전에 암호를 묻는 메시지가 나타납니다.


업데이트했습니다.
Philomath

2

우분투와 같은 데비안 기반 시스템에는 최소한 xtrlock (1)패키지 리포지토리를 통해 사용 가능한 유틸리티가 있습니다.

이 유틸리티는 암호가 입력 될 때까지 키보드와 마우스를 잠그고 창은 보이게합니다. 정보 디스플레이 등을 실행하는 컴퓨터에 유용합니다.


이것은 가장 간단하고 가벼운 옵션처럼 보이며 90 년대 중반부터되었습니다. 한 가지 문제는 잠긴 커서 이미지를 숨길 수 없다고 생각하여 간판에 사용할 수 없다는 것입니다.
aexl

1

하드웨어에 따라 모듈을 제거하고 하드웨어를 제어 할 수 있습니다. touchpadtoggle터치 패드를 활성화 및 비활성화 하는 스크립트 가 있습니다.

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

그러나 키보드에는 모듈이 연결되어 있지 않은 것으로 보이며 psmouse-module은 가끔 만 작동합니다.


1

데스크탑 환경 또는 로그인 관리자 (GNOME, KDE, XFCE, LXDE)를 사용하는 경우 거의 모든 프로그램에 암호 화면을 입력하여 프로그램으로 돌아 가야하는 잠금 화면 기능이 있습니다.

그러나 그것이 매우 간단하기 때문에 문제가 더 복잡하고 다르다는 것을 느낍니다.


업데이트했습니다.
Philomath

1

위의 답변을 통해이 .zshrc작업 .bashrc을 수행하기 위해 (에서 그러나 작동해야 함) 썼습니다 . 키보드에 해당하는 작업을 수행하려면에서 파라미터를 변경하십시오 grep Mouse.

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

SO에 대한 비슷한 질문에 대한 내 대답 을 확인하십시오 . 동일하지만 tty에서 호출 할 수 있으며 (해결 방법을 사용하여) 포인터를 숨 깁니다 .
엠마누엘 버그
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.