예상을 사용한 vncserver 자동화가 예상대로 작동하지 않습니다.

예상을 사용한 vncserver 자동화가 예상대로 작동하지 않습니다.

vncserver를 처음 실행했을 때 비밀번호를 요구하는 부분을 자동화하려고 생각했습니다(passwd 파일을 전달하는 플래그가 있다는 것을 알고 있지만 필요할 때마다 새 파일을 생성하는 것을 선호합니다).

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

여기서는 -d디버그 출력을 보기 위해 플래그를 사용하고 있으며, glob이 적어도 두 번째로 예상한 것과 부분적으로 일치하는 것처럼 보입니다(한 번 실패하고 두 번째 시도 후에 일치함).

또한 비밀번호를 보내는 데 사용할 수도 있는데(여기서는 "isthisevenworking"이라는 비밀번호 예시를 사용함) 작동하는 것 같습니다.

vncserver가 작동 중일 때도 일반적인 출력이 표시되지만 실행 중인 프로세스를 보면 vncserver가 실행되고 있지 않습니다... ( 폴더 passwd에 파일이 있음에도 불구하고 .vnc)

그러나 스크립트가 끝난 후 vnc를 수동으로 실행하거나 다음과 같이 스크립트 끝에 동일한 명령을 추가하면 vnc는 예제 비밀번호로 작동합니다.

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF
/usr/bin/vncserver -geometry 1366x768 :1

내가 알고 싶은 것은 vncserver 명령이 예상 스크립트 외부에서 실행되고 있음에도 불구하고 예상 섹션이 끝난 후 왜 실행되지 않는 것입니까?

작동하기 때문에 스크립트 마지막에 추가해도 상관없지만, 어차피 예상보다 비밀번호를 많이 설정한 후에 실행되기 때문에 좀 불필요한 느낌이...

편집: 이것이 "예상"대로 작동하지 않는 이유를 알 것 같습니다. 스크립트가 너무 빨리 중지되고 시작하기 전에 vncserver가 중지되는 것 같습니다. 다음을 수행하여 동일한 작업을 수동으로 시뮬레이션할 수 있습니다.

/usr/bin/vncserver -geometry 1366x768 :1

비밀번호를 두 번 입력하고 +를 입력한 후 n실행하세요 Ctrl.D

그래서 나는 무한한 시간 초과를 추가하려고 생각했습니다.

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

하지만 여전히 작동하지 않습니다. 마지막 시도 sleep:

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
spawn /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
sleep 10
expect eof
sleep 10
EOF

그건 쓸모가 없어...

답변1

~인 것 같다이것내 문제와 관련된 게시물입니다. 그래서 나는 거기에 가서 두 가지 답변/접근 방식을 시도했습니다.

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn -ignore HUP /usr/bin/vncserver -geometry 1366x768 :1
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect_background
expect eof
EOF

작동하지 않지만 :

#!/bin/bash

read -s PWD

/usr/bin/expect -d <<EOF
set timeout -1
spawn screen bash
send "/usr/bin/vncserver -geometry 1366x768 :1\r"
expect "Password:"
send "$PWD\r"
expect "Verify:"
send "$PWD\r"
expect "Would you like to enter a view-only password"
send "n\r"
expect eof
EOF

이미 작업 중입니다.

관련 정보