Отключите вход Клавиатуры и Мыши на Unix (под X)

Амперсанд. Это помещает Вашу команду в фоновом режиме, таким образом, можно продолжить вводить.

$> sudo updatedb &

При работе вперед, и через некоторое время Вы видите:

[1] 17403

И Ваш процесс сделан! Большой для вещей, где Вы не должны ожидать их для завершения.

28
22.07.2011, 02:58
8 ответов

Принятие Вашего 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

То же идет для клавиатуры, просто замените число международной опоры надлежащим идентификатором.
Протестированный и работал над cygwin.

Конечно, необходимо ли запланировать заранее, как Вы включите свои устройства снова. такой как расписание это на кроне, повторно включите его удаленно или отключите только одного из них в первом месте.

24
27.01.2020, 19:39
  • 1
    Никакой другой ответ здесь не отвечает на вопрос. –  Philomath 29.07.2011, 01:48
  • 2
    В моем случае команда для отключения мыши похожа на это: xinput set-int-prop 9 "Device Enabled" 8 0 - только, 1) я хотел бы скрыть указатель мыши также и 2) если я иду от X до tty (Linux console/VTs), и затем обратно к X, это сбрасывается (xinput list-props 9 подтверждает это). –  Emanuel Berg 31.12.2012, 00:11

Ваш ответ является, вероятно, лучшим для Вашего второго варианта использования (выполнение чего-то удаленно), но вероятно не для Вашего первого (быть вдали от клавиатуры). Как Вы выполнили бы xinput снова для восстановления доступа, когда Вы возвращаетесь?

Стандартное решение блокировки системы коротает время от него, XScreenSaver, который установлен по умолчанию в большинстве дистрибутивов. Если настроено для блокировки клавиатуры это запросит пароль прежде, чем разблокировать его.

2
27.01.2020, 19:39

В зависимости от Ваших аппаратных средств можно удалить модули, управляя аппаратными средствами. У меня есть такой сценарий, touchpadtoggle, включить и отключить мою сенсорную панель.

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

Но клавиатура, кажется, не связывает модуль, и psmouse-модуль будет только иногда работать.

1
27.01.2020, 19:39

Если Вы используете Настольную среду или входите в менеджера, (GNOME, KDE, XFCE, LXDE), у почти всех их есть экранная функция блокировки, где необходимо ввести в пароле для возвращения к программам.

Однако, так как это действительно просто, я распознаюсь, Ваша проблема более сложна / отличающийся.

1
27.01.2020, 19:39

Вопрос, которому отвечают, с помощью xinput является правильным, но здесь является быстрым, если все, что Вы ищете, является простой блокировкой типа экранной заставки. Я записал обратно это в 90-х и все, что это делает, едят события клавиатуры X-сервера и события от нажатия мыши, пока Вы не вводите пароль. Никакая обратная связь вообще кроме выхода, когда Вы вводите его правильно.

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

Я использую его в качестве экранной блокировки, точно как Вы хотите использовать его.

6
27.01.2020, 19:39
  • 1
    , который я проголосовал за это, поскольку это - вид решения, которое я хочу, но он не работает на меня на Linux с теневыми паролями. Процесс должен быть корнем к доступу/etc/shadow и присоединенным функциям, но я хочу выполнить xl как некорневой пользователь. Мой вариант использования: когда мы смотрим шоу на компьютере, моей маленькой дочке нравится колотить на клавиатуре! xscreensaver не полезен для этого –  Sam Watkins 16.05.2013, 07:35
  • 2
    Ваш ответ является ярким примером "suckless", или программирование Unix "делают одну вещь и делают это хорошо"... за исключением того, что это не работает на меня (с теневыми паролями!) Для моего варианта использования я счастлив к твердому коду пароль, таким образом, это хорошо. Теперь учите меня, как отключить кнопку питания, это - любимая кнопка моего ребенка! –  Sam Watkins 16.05.2013, 07:41
  • 3
    , почему Вы не хотите корень? почему не suid xl двоичный файл? –  Danny Dulai 03.06.2013, 18:20
  • 4
    BTW, можно указать пароль на командной строке или через переменную среды теперь. –  Danny Dulai 20.02.2014, 01:16
  • 5
    Действительно ли возможно съесть X входных событий со стандартом X наборов инструментов и сценарий оболочки? –  Alexander Shcheblikin 30.09.2014, 01:38

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
14
27.01.2020, 19:39
  • 1
    Проверьте мой комментарий к сообщению Philomath. У меня есть та же проблема для xinput --disable 9. –  Emanuel Berg 31.12.2012, 00:13

Я записал это (в .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  }
1
27.01.2020, 19:39
  • 1
    Проверьте мой ответ на подобный вопрос на ТАК - он делает то же, но может быть вызван от tty, и, он также (использующий обходное решение) скрывает указатель. –  Emanuel Berg 24.01.2013, 05:33

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

Эта утилита блокирует клавиатуру и мышь до тех пор, пока не будет введён пароль, оставляя видимыми окна. Я нахожу ее полезной для компьютеров, на которых запущены информационные дисплеи и тому подобное.

2
27.01.2020, 19:39

Теги

Похожие вопросы