Количество журнала хитов клавиатуры

Используя Bash это может быть сделано без использования printf '%s\n' "$PASS" путем соединения так называемого здесь представляют в виде строки с дескрипторами файлов с помощью встроенного Bash exec команда.

Для получения дополнительной информации см.: безопасность пароля Сценария оболочки параметров командной строки.

(

# sample code to edit password-protected file with openssl
# user should have to enter password only once
# password should not become visible using the ps command

echo hello > tmp.file

#env -i bash --norc   # clean up environment
set +o history
unset PASS || exit 1

read -sp 'Enter password. ' PASS; echo

# encrypt file and protect it by given password
exec 3<<<"$PASS"
openssl enc -e -aes-256-cbc -pass fd:3  -in tmp.file -out file

cp file{,.old}

# decode | edit | encode
exec 3<<<"$PASS" 4<<<"$PASS"
openssl enc -d -aes-256-cbc -pass fd:3 -in file.old | 
   sed 's/l/L/g' | 
   openssl enc -e -aes-256-cbc -pass fd:4 -out file

exec 3<<<"$PASS"
openssl enc -d -aes-256-cbc -pass fd:3 -in file

rm -P tmp.file file.old
unset PASS

)

5
20.11.2012, 17:26
2 ответа

Контроль в X11 (графический рабочий стол) сессия только

В Вы используете уровень XInput (Вы, вероятно, если Вы выполняете современное X), затем xinput test «keyboard-id» (от xinput пакет на Debian), даст нажатие pey и выпустит события. Можно получить идентификатор клавиатуры путем выполнения xinput list. Можно также использовать имя.

xinput test 'AT Translated Set 2 keyboard' | grep -c 'key press'

Обратите внимание на это, когда Вы передадите по каналу xinput, это имеет довольно большой буфер. Таким образом, можно потерять некоторые нажатия клавиш, к сожалению. Вы могли использовать XI2 API непосредственно, чтобы избежать этого, но это не легко от оболочки.

Можно довольно легко запустить сценарий как один из сценариев входа в систему в настольной среде или от Вашего .xsession файл, завися. xinput должен выйти, когда Вы выходите из системы, потому что это потеряет свое соединение X11. Таким образом, действительно легко отследить, когда Ваша сессия запускается и заканчивается.

Контроль в масштабе всей системы (все сессии, даже текстовый режим)

С другой стороны, если Вы хотите контролировать все нажатия клавиш в системе, не только нажатия клавиш на Вашей сессии X11, можно использовать input-events (часть входного-utils пакета на Debian, по крайней мере). Это должно работать как корень. Использовать lsinputs для нахождения правильного устройства ввода данных (оказывается, 0 в моей системе), и затем:

input-events 0 | grep -c 'EV_KEY.*pressed'

Если Вы идете этим путем, необходимо будет выяснить, когда сессии запускают и заканчивают некоторый путь (например, dbus предложение peterph).

8
27.01.2020, 20:34

Как упомянутый Derobert, xinput может использоваться (xinput --test-xi2 должен работать - необходимо было бы считать строки, содержащие RawKeyPress). Однако необходимо было бы запустить скрипт, как только сессия запускается, и остановитесь, после того как это заканчивается - таким образом, Вы, вероятно, хотели бы наблюдать за dbus сессией также.

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

4
27.01.2020, 20:34
  • 1
    К вашему сведению: В большинстве рабочих столов ее довольно легкое для знания, когда сессия запускается — можно добавить сценарии входа в систему, которые это запустит с сессии. То, когда это останавливается, также легко, именно тогда xinput выйдет (от потери его соединения X11). Я обновлю свой ответ с этим. –  derobert 21.11.2012, 17:30
  • 2
    Вам не должен быть нужен модуль ядра — посмотрите input-utils пакет. Другая вещь вставить мой :-P –  derobert 21.11.2012, 17:35
  • 3
    ответа кроме того, xinput --test-xi2 открывается окно здесь, которое является, почему я не использовал его. –  derobert 21.11.2012, 17:45
  • 4
    @derobert вот еще, я полностью забыл о /dev/input (который является что input-utils кажется, использую), :) –  peterph 22.11.2012, 00:05

Теги

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