Есть ли способ заставить программы запрашивать пароль, когда требуется root? Например, я хочу извлечь некоторые файлы с помощью File Roller в /usr/share/
, где, по-видимому, требуется root, но вместо ошибки, которую он дает мне, я хотел бы запросить пароль.
Чтобы прямо ответить на ваш вопрос: Нет, насколько я знаю, нет способа заставить программу запросить пароль, вместо того, чтобы выполнить ее, если у нее недостаточно разрешений для выполнения операции. Есть два варианта:
Некоторые программы знают, что им нужны административные привилегии для некоторых операций, и запрашивают пароль перед выполнением чего-либо (т. Е. Software Center запрашивает пароль перед установкой программ).
Большинство других программ необходимо запускать с необходимыми привилегиями. Как уже упоминалось, для этого вам нужно использовать sudo [command]
(в терминале), gksu [command]
(в Gnome / Unity) или kdesu [command]
(в KDE).
Обычный способ - перейти в режим командной строки ( alt + F2 kbd> xterm
или dash терминал), затем использовать gksudo file-roller
и ввести свой пароль.
sudo и gksudo предоставят вам root-права.
Есть ли способ заставить программы запрашивать пароль, когда требуется root?
Да - с помощью вспомогательных скриптов.
Вот пример с копией bash (cp). Копирование (резервное копирование) заключено в сценарий perl для проверки владельца файла. Скрипт использует команду perl stat / 1 /. Здесь скрипт вызывается из сервисного меню KDE / 2 /. Если файл принадлежит пользователю root / 3 /, тогда используется внешний интерфейс KDE для sudo / 4 /, /5/.
backup.pl:
использование: «backup.pl filename»
#!/usr/bin/perl -w
$FILENAME = $ARGV[0];
$MARKER = "_Backup_";
($DAY,$MONTH,$YEAR) = (localtime)[3,4,5];
$DAY_STAMP = sprintf '%04d%02d%02d', $YEAR+1900, $MONTH+1, $DAY;
for ( $I=0; $I<101; $I++ ) {
if ( $I > 99 ) { die system ("kdialog --sorry '...too many copies'"); }
$INDEX = sprintf '%02d', $I;
$NEW_NAME = $FILENAME . $MARKER . $DAY_STAMP . $INDEX;
last unless (-e $NEW_NAME);
}
$UID = (stat("$FILENAME"))[4];
@Q_COPY_COMMAND = ("\"", "cp", "$FILENAME", "$NEW_NAME", "\"");
@COPY_COMMAND = ("cp", "$FILENAME", "$NEW_NAME");
if ( $UID == 0 ) {
system ("kdesudo bash -c @Q_COPY_COMMAND");
} else {
system ("@COPY_COMMAND");
}
Ссылки:
Необходимо было бы запустить использование Ролика Файла gksu
как упомянуто предыдущим пользователем. Когда Вы добавляете объекты к своей панели запуска, можно использовать команду, такую как faxanswer, который требует полномочий:
gksu faxanswer ttyS4
Если Вы используете тот Ролик Файла однажды для обновления материала в /usr/share
, лучше просто использовать Команду выполнения, чем создают постоянный значок.