문제

RPi가 클라이언트이고 내 VNC 서버가 MS Windows를 실행하는 PHP를 사용하여 Raspberry Pi에서 vncviewer를 시작하려고 합니다.

PHP에서는 이 스크립트를 사용하여 vncviewer를 시작합니다.

$cmd="echo password | vncviewer -autopass " .$ip;
shell_exec($cmd);

RPi에서 쉘 스크립트를 실행할 때만 작동하지만 PHP에서 실행하면 다음 오류가 발생합니다.

Error: Can't open display:

이 오류에 대한 해결 방법이 있습니까?

도움이 되었습니까?

해결책

X11을 사용하는 경우 아마도 다음을 설정해야 할 것입니다. DISPLAY 변하기 쉬운.

X11 서버(디스플레이)에서 창을 열어야 하는 X11 클라이언트(프로그램)는 이 변수를 사용하여 클라이언트가 서버를 찾을 위치를 결정합니다.여기서는 클라이언트/서버 모델이 사용됩니다. 섬기는 사람 창 표시 기능을 제공합니다. 고객.

X에는 ​​네트워크를 통해 원격 서버에 창을 표시하는 기능이 포함되어 있지만 99.9%의 시간 동안 프로그램을 실행하는 컴퓨터의 기본 디스플레이에 내용이 표시되므로 일반적으로 DISPLAY=localhost:0.0.

문제는 만약에 DISPLAY ~이다 ~ 아니다 설정된 경우, 동일한 시스템에서 실행되는 X 서버가 있더라도 프로그램은 창을 어디에서 열어야 할지 모릅니다.그리고 프로그램이 실행될 때 cron 또는 시스템 시작 스크립트 또는 실제로 X 자체에서 실행되지 않은 모든 것(웹 서버에서 실행되는 PHP 스크립트 포함)에는 일반적으로 없습니다. DISPLAY 무엇이든 설정하세요.

그래서 ..의견에서 언급했듯이 설정 DISPLAY=:0 vncviewer에게 창을 보낼 위치를 알려줍니다.이것은 의 단축형입니다. DISPLAY=localhost:0.0.제외된 경우 호스트 이름은 localhost로 간주됩니다.그리고 .0 마지막에는 화면 번호를 나타내며 기본값은 0입니다.확인해 보세요 자세한 내용은 X 문서.

그리고 주석에서도 언급했듯이 X가 실행되는 환경(예: DISPLAY 이미 설정되어 있음) 실행해야 할 수도 있습니다. xhost + X에서 시작하지 않은 프로그램이 창을 열 수 있도록 허용합니다.

PHP에서 환경 변수를 설정하려면 다음과 같이 사용하십시오.

putenv("DISPLAY=:0");

VNC를 시작하는 코드 앞에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top