После еще немного эмпирические, Google и man
, эта версия работает, как я ожидал:
#!/bin/bash
function findInArray() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [[ ${!i} == ${value}:* ]]; then
echo "${!i}"
return 0
fi
}
echo
return 1
}
list=( 10:1 11:2 12:3 36:Return 37:Control_L 38:a 39:s 134:Super_R 135:Menu )
clear
echo -e "${#list[@]} keys to test\n\n${list[@]}"
xev | \
awk -W interactive '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ;
do
found=$(findInArray "${list[@]}" ${keycode})
if [[ $found ]]; then
clear
echo Pressed $found
list=(${list[@]/$found/})
remaining=${#list[@]}
stdbuf -oL -eL echo -e "$remaining keys remaining\n\n${list[@]}"
if [[ $remaining == 0 ]]; then
clear
echo All keys successfully tested!
pkill xev
exit 0
fi
fi
done
Создайте свой список на основе xev
вывод (я поспешно использовал xev | grep keycode
, удар клавиатуры и regex замены на текстовом редакторе) и замена это.
Я предположил, что ваша проблема - это файл Су-PAM и модуль PAM_ROOTOK
.
#%PAM-1.0
auth sufficient pam_rootok.so
auth include system-auth
Достаточное
пункт краткосрезает процесс аутентификации. Таким образом, System-Auth никогда не включается, что означает модуль PAM_GROUP никогда не активирован для этого сеанса.
Тогда Вздох Я прочитал ваше редактирование. Во всяком случае, это определенно является началом выяснения этого. Возможно, включите отладку для PAM_GROUP, чтобы увидеть, возвращает ли он одним из документированных значений ошибок ( MAN PAM_GROUP
).
О Sudo, это на самом деле имеет смысл, что после аутентификация пользователь через PAM, все учетная запись информация выброшена / отключено. Он имеет свои собственные механизмы для добавления пользователей к группам. Попробуйте добавить опцию PRESERV_GROUPS
для соответствующей записи sudo.
Все это заставляет меня удивляться: почему PAM создал модуль группы только для AUTH . На самом деле это должно быть частью учетной записи .
-121--57109-Самый простой подход, вероятно, будет настроить второй блок местоположения с альтернативной аутентификацией.
-121--244164- Сценарии Sysvinit INIT.D часто используют пусковой стоп-демон
.
Вы можете изменить их и добавить -N
. Параметры , чтобы изменить хороший уровень демонов.
рядом с этим вы можете написать свой собственный скрипт, который повторяет процессы и вызывает его в /etc/init.d/rc.local
.
Есть также автоматические красивые демоны (вроде и ), которые могут выполнять эту задачу автоматически.