Как передать пароль к sudo с zenity, pv и d d

Я хочу позволить пользователям записывать ISO-образы на USB-накопитель из Thunar или Dolphin.

Для этого я создал скрипт bash, который использует dd, pv и zenity.

В настоящее время я использую pkexec для запроса пароля перед выполнением команды dd, но окно pkexec и окно прогресса zenity открываются одновременно. Я хотел бы сначала открыть окно для пароля root, после чего должно быть открыто окно прогресса zenity.

Сначала я попытался запросить пароль с zenity, после чего я передаю пароль в sudo, но куда бы я ни поставил "echo $PWD", пароль не передается в sudo.

#!/bin/bash

TITLE='Zenity Progress Test'

PASSWORD=$(zenity --password \
                     --width=300 \
                     --title="$TITLE")
if [ ! -z "$PASSWORD" ]; then
    echo "Your password: $PASSWORD"
    dd if=/dev/zero of="$PWD/testfile1" bs=1M count=100
    pv -n testfile1 2> >(zenity --progress \
                                           --width=300 \
                                           --title="$TITLE" \
                                           --percentage=0 \
                                           --auto-close \
                                           --auto-kill) | echo "$PASSWORD" | sudo -S dd of="$PWD/testfile2" bs=64k oflag=dsync
    echo "$PASSWORD" | sudo -S rm "$PWD/testfile1" "$PWD/testfile2"
else
    echo 'No password provided'
    exit 1
fi

Окно прогресса zenity просто мигает, и ничего не передается, скорее всего, потому что пароль не передается в sudo.

Если вы замените "echo $PASSWORD | sudo -S" на "pkexec", код будет функционировать, но и вместе откроется окно pkexec и окно прогресса zenity.

Есть идеи, как решить эту загадку?

1 ответ

Используйте параметр -S для чтения из стандартного ввода

$echo <password> | sudo -S <command>
Другие вопросы по тегам