Я использую здесь документы в скрипте bash для автоматизации установки и настройки, где пароль требуется много раз. Я ввожу пароль один раз, и скрипт передает его различным командам. В большинстве случаев подход здесь-документа справляется с этим штрафом. Однако в одном случае я получаю эту ошибку:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Обратите внимание, что это сообщение об ошибке от x11vnc -storepassword
(не от sudo
.)
Моя проблема связана с x11vnc -storepasswd
вот моим кодом:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
Это очевидно (из ошибки) не работает. Я был бы признателен за рабочий пример того, как реализовать sudo x11vnc -storepasswd ~/.vnc/passwd
в сценарии.
Если это помогает, подсказки выглядят так:
Введите пароль VNC: Подтвердите
пароль:
Напишите пароль в /home/user/.vnc/passwd? [у] / пп
Будет ли использование expect
лучшим решением? Если так, как бы я использовал это в этом случае? (Я никогда не использовал expect
раньше, но с момента публикации этого вопроса я просмотрел много примеров, и я не могу приступить expect
к работе самостоятельно.)
источник
sudo
она исходит отx11vnc -storepassword
. Я пробовал разныеexpect
подходы, и я не могу понять это правильно. Был бы очень признателенexpect
за пример использования пароля дляx11vnc -storepassword
. Я обновлю свой вопрос, чтобы избежать дальнейшей путаницы.Enter VNC password: usage: send [args] string
на линииexpect "password:" {send "swordfish" "\r"}
. Я не уверен, как это исправить. Ожидается, что это очень требовательный инструмент, потому что я часами дурачился с этой конкретной проблемой, но пока не получил результатов.send "swordfish" "\r"
и была устраненаsend "swordfish\r"
. Тем не менее, решение по-прежнему не работает. Пароль не записывается в ~ / .vnc / passwd. Я до сих пор не знаю, почему. Как я уже сказал, я видел этот результат, несмотря на то, что пытался все, что я могу думать до сих пор.expect
решении, работают при вводе вручную. Они не работают в этомexpect
сценарии или любом другом варианте, который я пробовал до сих пор.Другой способ избежать этих предупреждающих сообщений - выполнить
x11vnc
в псевдо-терминале, созданном командой UNIX (см. Использование псевдо-терминалов (pty) для управления интерактивными программами ). Это можно сделать с помощьюscript
команды или инструментов, таких какpdip
(«Запрограммированный диалог с интерактивными программами»).Предупреждающие сообщения в Mac OS X 10.6.8 за отсутствие псевдо-терминала для
x11vnc
:Решения с помощью
script
команды:источник
У Sudo есть опция
-S
, позволяющая читать пароль из STDIN.Вот пример сценария для демонстрации процесса:
Ваш сценарий просто должен был бы сделать что-то вроде:
Это позволит вам использовать команды sudo в вашем скрипте без необходимости жесткого пароля.
В качестве альтернативы, вы можете добавить своего пользователя или подмножество пользователей возможностью запускать x11vnc с помощью sudo, без пароля, но добавив следующую строку
/etc/sudoers
:Или создайте
vncusers
группу, добавьте пользователей в эту группу и добавьте следующее/etc/sudoers
:источник
sudo
она исходит отx11vnc -storepassword
.