Вимкнути введення клавіатури та миші на unix (під X)


28

Як можна тимчасово «заморозити» клавіатуру та мишу, щоб ніхто не міг возитися із системою?

Є кілька можливостей, де це корисно. Наприклад, у мене ноутбук, і я хочу переконатися, що його ніхто не використовує, поки я виїжджаю, навіть якщо хтось знає пароль або може його вгадати (як дружина або діти), а також пригнічує апетит злодіїв (як здається -функціонування). або я щось роблю віддалено, тому хочу переконатися, що користувач за комп’ютером не турбує.


Відповіді:


24

Припустимо, що ваш GUI заснований на X (як майже всі графічні інтерфейси UNIX), використовуйте 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 на відповідний ідентифікатор.
Тестував і працював на cygwin.

Звичайно, ви повинні заздалегідь спланувати, як ви знову ввімкнете свої пристрої. наприклад, запланувати його на cron, повторно включити його або відключити спочатку лише один із них.


Жодна інша відповідь тут не відповідає на питання.
Філомат

У моєму випадку команда відключення миші виглядає приблизно так: xinput set-int-prop 9 "Device Enabled" 8 0- лише 1) Я також хотів би приховати вказівник миші та 2) якщо я перейду з X на tty (консоль Linux / VT), і потім повертаємось до X, це скидається ( xinput list-props 9підтверджує це).
Емануель Берг

Чи можна відключити пристрій "головний вказівник"?
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

Ознайомтесь з моїм коментарем до поста Філомата. У мене така ж проблема xinput --disable 9.
Емануель Берг

6

Відповідь на запитання за допомогою xinput є правильним, але ось швидкий, якщо все, що ви шукаєте, це простий замок типу заставки. Я написав це ще в 90-х, і все, що він робить, це з'їсти події клавіатури та миші X-сервера, поки не введеш пароль. Жодного відгуку немає, окрім як немає, коли ви правильно введете його.

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

Я використовую його як блокування екрана, саме так, як ви хочете його використовувати.


Я проголосував за це, оскільки це саме таке рішення, яке я хочу, але воно не працює для мене в Linux із тіньовими паролями. Процес має бути root для доступу / etc / shadow та пов'язаних з ним функцій, але я хочу запустити xl як некористувальний користувач. Мій випадок використання: коли ми дивимось шоу на комп’ютері, моя донечка любить грати на клавіатурі! xscreensaver для цього не корисний
Сем Уоткінс

Ваша відповідь - чудовий приклад "бездоганного" або unix-програмування "зробіть одне і зробіть це добре" ... за винятком того, що воно не працює для мене (із тіньовими паролями!). -кодування пароля, тож це нормально. Тепер навчіть мене, як відключити кнопку живлення, це улюблена кнопка моєї дитини!
Сем Уоткінс

чому ти не хочеш root? чому б не судити xl двійкові?
Денні Дулай

До речі, зараз ви можете вказати пароль в командному рядку або через змінну середовища.
Денні Дулай

Чи можна їсти події X введення за допомогою стандартного набору інструментів X та сценарію оболонки?
Олександр Щеблікін

2

Ваша відповідь, мабуть, найкраща для вашого випадку другого використання (робити щось віддалено), але, мабуть, не для вашого першого (якщо ви не знаходитесь від клавіатури). Як би ви знову запустили xinput, щоб відновити доступ при поверненні?

Стандартним рішенням блокування системи , яка знаходиться вдалині від неї, є XScreenSaver , який встановлюється за замовчуванням у більшості дистрибутивів. Якщо налаштовано блокування клавіатури, він запропонує ввести пароль перед розблокуванням.


Я оновив.
Філомат

2

Принаймні, на базі систем Debian, таких як Ubuntu, є утиліта, яка називається xtrlock (1)доступною через сховища пакетів.

Ця утиліта блокує клавіатуру та мишу, поки не буде введено пароль, не залишаючи видимими вікна. Я вважаю його корисним для комп'ютерів, на яких розміщені інформаційні дисплеї тощо.


Це здається найпростішим і легким варіантом, і він існує ще з середини 90-х. Одна з проблем полягає в тому, що я не думаю, що можливо приховати зображення заблокованого курсору, що, на жаль, робить це непридатним для вивісок.
aexl

1

Залежно від обладнання, ви можете видалити модулі, контролюючи обладнання. У мене є такий сценарій touchpadtoggle, щоб увімкнути та відключити тачпад.

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

Але, схоже, на клавіатурі не пов’язаний модуль, і psmouse-модуль працюватиме лише зрідка.


1

Якщо ви використовуєте Desktop Environment або менеджер входу, (GNOME, KDE, XFCE, LXDE) майже всі вони мають функцію блокування екрана, куди вам потрібно ввести пароль, щоб повернутися до своїх програм.

Однак оскільки це дуже просто, я вважаю, що ваша проблема є складнішою / різною.


Я оновив.
Філомат

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, і, він також (використовуючи обхідний шлях) приховує вказівник.
Емануель Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.