저는 Debian 기반의 Raspbian을 사용하고 있습니다. 내 Raspberry Pi가 자동으로 데스크탑으로 부팅됩니다. 나는 C로 작성되고 g++를 사용하여 실행 파일로 컴파일된 작은 프로그램을 가지고 있습니다. 이 프로그램을 실행하려면 네트워크 연결이 필요하며 일부 데이터를 터미널에 출력합니다. 멋진 것은 없습니다.
그것을 사용하려면 LXterminal 창을 열고 sudo 권한으로 프로그램을 수동으로 실행해야 했습니다.
sudo ./Desktop/rpiMainProgram
내 질문은: 네트워크 연결을 설정한 후 터미널 기반 프로그램을 자동으로 시작하려면 어떻게 해야 합니까?
나는 사용한다다이얼3G 어댑터를 자동으로 연결하려면 패스하세요 /etc/network/interface
. 연결이 유효합니다. 핑과 서핑을 할 수 있어요
auto ppp0
iface ppp0 inet wvdial
나는 팔로우한다이 튜토리얼필요한 경우 wvdial을 설정하십시오.
나방법을 참조하십시오bash(?) 스크립트를 호출하기 위해 post-up
in 메소드를 사용합니다 . /etc/network/interfaces
하지만 이 방법을 사용하면 GUI가 아닌 응용 프로그램을 실행할 수 없습니다.
포기하기 전 마지막 시도는
auto ppp0
iface ppp0 inet wvdial
post-up LXterminal "sudo ./Desktop/rpiMainProgram"
답변1
다음과 같은 내용을 파일에 넣을 수 있습니다 /etc/rc.local
(테스트되지 않음).
{ while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done; /home/youruser/Desktop/rpiMainProgram > /home/youruser/Desktop/rpiMainProgram.log 2>&1; }&
ping -c 1 -W 1 8.8.8.8
: ping 패킷을 보내고 1초 동안 응답을 기다립니다.
while
명령이 상태 코드 >0(즉, 실패)으로 종료되는 동안 ping
루프는 계속됩니다 .
네트워크 연결이 있고 8.8.8.8
성공적으로 ping할 수 있으면 루프가 중지되고 프로그램이 실행됩니다(이렇게 호출하면 효과가 있는지 확인하세요. 예를 들어 다음을 pwd
사용하여
이를 통해 {}
이를 단일 명령 유형으로 변환하여 를 사용하여 전체를 백그라운드로 푸시할 수 있습니다 &
. 그렇지 않으면 /etc/rc.local
네트워크가 생길 때까지 나머지를 차단합니다 .
더 우아한 솔루션이 있을 수 있지만 내 Pi에도 비슷한 솔루션이 있습니다.
답변2
터미널 멀티플렉서에서 프로그램을 시작하십시오.화면또는멀티플렉서. 이를 사용하여 프로그램을 실행하고 상호 작용할 때 연결할 수 있는 별도의 터미널을 만듭니다. 예를 들어 화면의 경우 시작 중에 다음 명령을 실행합니다.
screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
그리고 이를 사용하여 프로그램이 실행 중인 화면 인스턴스에 연결합니다.
screen -S rpiMainProgram -r -d
스크린 인스턴스에서 분리하려면 Ctrl+를 누른 A다음 를 누르세요 d.
데비안에서는 네트워크 인터페이스를 활성화한 후 프로그램을 실행하려면,스크립트 추가/etc/network/if-up.d
. 어떤 인터페이스가 작동되고 있는지 확인해야 합니다(특히 루프백 인터페이스가 작동 중일 때 프로그램을 시작하고 싶지는 않습니다). /etc/network/if-up.d/local_rpiMainProgram
유사한 콘텐츠로 콘텐츠 만들기
#!/bin/sh
case "$IFACE" in
ppp0) screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
esac
또는
#!/bin/sh
if ping -q -W1 -c1 8.8.8.8; then
screen -S rpiMainProgram -d -m /home/nixda/Desktop/rpiMainProgram
fi
답변3
rungetty를 사용하여 사용하지 않는 가상 터미널에서 이를 실행하면 정상적으로 작동합니다. 제어 Alt FN출력을 봅니다.