Используя 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
)
В Вы используете уровень 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).
Как упомянутый Derobert, xinput
может использоваться (xinput --test-xi2
должен работать - необходимо было бы считать строки, содержащие RawKeyPress
). Однако необходимо было бы запустить скрипт, как только сессия запускается, и остановитесь, после того как это заканчивается - таким образом, Вы, вероятно, хотели бы наблюдать за dbus сессией также.
Кроме того, Вы пропустили бы что-либо введенное на виртуальных консолях - для этого я боюсь, что необходимо было бы записать модуль ядра, который экспортирует его статистику куда-нибудь в /proc
или /sys
- но это включало бы в значительной степени все, что входит в компьютер.
xinput
выйдет (от потери его соединения X11). Я обновлю свой ответ с этим.
– derobert
21.11.2012, 17:30
input-utils
пакет. Другая вещь вставить мой :-P
– derobert
21.11.2012, 17:35
xinput --test-xi2
открывается окно здесь, которое является, почему я не использовал его.
– derobert
21.11.2012, 17:45
/dev/input
(который является что input-utils
кажется, использую), :)
– peterph
22.11.2012, 00:05