Korzystam z dokumentów tutaj w skrypcie bash, aby zautomatyzować instalację i konfigurację, w której hasło jest wymagane wiele razy. Podaję hasło raz, a skrypt przekazuje je do różnych poleceń. W większości przypadków podejście oparte na dokumencie obsługuje tę grzywnę. Jednak w jednym przypadku pojawia się ten błąd:
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:
stty: standard input: Inappropriate ioctl for device
Zauważ, że ten komunikat o błędzie pochodzi z x11vnc -storepassword
(nie z sudo
).
Mój problem dotyczy x11vnc -storepasswd
i oto mój kod:
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC
To oczywiście (z błędu) nie działa. Byłbym wdzięczny za działający przykład implementacji sudo x11vnc -storepasswd ~/.vnc/passwd
w skrypcie.
W razie potrzeby monity wyglądają następująco:
Wprowadź hasło VNC:
Potwierdź hasło:
Zapisać hasło do /home/user/.vnc/passwd? [y] / nn
Czy używanie expect
będzie lepszym rozwiązaniem? Jeśli tak, jak miałbym go użyć w tym przypadku? (Nigdy wcześniej nie korzystałem, expect
ale od czasu zamieszczenia tego pytania sprawdziłem wiele przykładów i nie mogę expect
samodzielnie pracować).
źródło
sudo
niego pochodzix11vnc -storepassword
. Próbowałem różnychexpect
podejść i wydaje mi się, że nie potrafię tego zrobić poprawnie. Byłby bardzo wdzięczny przykład użyciaexpect
hasła dox11vnc -storepassword
. Zaktualizuję moje pytanie, aby uniknąć dalszych nieporozumień.Enter VNC password: usage: send [args] string
na liniiexpect "password:" {send "swordfish" "\r"}
. Nie jestem pewien, jak to naprawić. Spodziewaj się, że wydaje się być bardzo wybrednym narzędziem, ponieważ oszukuję ten konkretny problem od wielu godzin, nie osiągając jeszcze wyników.send "swordfish" "\r"
i został rozwiązany przezsend "swordfish\r"
. Jednak rozwiązanie nadal nie działa. Żadne hasło nie jest zapisywane do ~ / .vnc / passwd. Nadal nie mam pojęcia, dlaczego. Jak powiedziałem, widziałem ten wynik, pomimo próbowania wszystkiego, co do tej pory myślę.expect
rozwiązaniu działają po ręcznym wprowadzeniu. Nie działają one w tymexpect
skrypcie ani w żadnej jego odmianie, której do tej pory próbowałem.Inną opcją uniknięcia tych komunikatów ostrzegawczych jest wykonanie
x11vnc
w pseudo-terminalu utworzonym przez komendę UNIX (patrz Używanie pseudo-terminali (pty) do sterowania programami interaktywnymi ). Można tego dokonać za pomocąscript
polecenia lub narzędzi, takich jakpdip
(„Programowany dialog z programami interaktywnymi”).Komunikaty ostrzegawcze w systemie Mac OS X 10.6.8 z powodu braku pseudo-terminala dla
x11vnc
:Rozwiązania wykorzystujące
script
polecenie:źródło
Sudo ma opcję,
-S
która pozwala odczytać passwd ze STDIN.Oto przykładowy skrypt pokazujący proces:
Twój skrypt musiałby po prostu zrobić coś takiego:
Umożliwiłoby to użycie poleceń sudo w skrypcie bez konieczności kodowania hasła.
Alternatywnie możesz dodać użytkownika lub podzbiór użytkowników, możliwość uruchamiania x11vnc z sudo, bez hasła, ale dodając taką linię do
/etc/sudoers
:Lub utwórz
vncusers
grupę, dodaj użytkowników do tej grupy i dodaj następujące elementy do/etc/sudoers
:źródło
sudo
niego pochodzix11vnc -storepassword
.