Я только что написал следующее, используя @gilles awesome answer в качестве шаблона. У меня хорошо работает. Проверено на Ubuntu 16.04 с использованием zsh.
# get all users
getent passwd | while IFS=: read -r name password uid gid gecos home shell; do
# only users that own their home directory
if [ -d "$home" ] && [ "$(stat -c %u "$home")" = "$uid" ]; then
# only users that have a shell, and a shell is not equal to /bin/false or /usr/sbin/nologin
if [ ! -z "$shell" ] && [ "$shell" != "/bin/false" ] && [ "$shell" != "/usr/sbin/nologin" ]; then
echo "$name's home directory is $home using shell $shell"
fi
fi
done
Вам необходимо написать правило для каждого из возможных типов устройства ввода, например:
В правиле проверьте, что переменная среды с таким именем не пуста, например, сопоставьте ее с шаблоном glob ? *
, который соответствует только при наличии есть хотя бы один символ. Например:
ENV{ID_INPUT_KEYBOARD}=="?*"
В каждом правиле, когда оно соответствует, установите для атрибута устройства авторизованный
значение 0, например:
ATTR{authorized}="0"
Лучше всего заменить =
на : =
, поэтому он не может быть отменен более поздним правилом. Это дает типичное правило:
ACTION=="add", DEVPATH=="...", ENV{ID_INPUT_KEYBOARD}=="?*", ATTR{authorized}:="0"
См. эту презентацию Адриана Креншоу.