스크립트는 /home/pi/.config/lxsessions/LXDE-pi/autostart
다음 줄로 호출됩니다.
@bash /home/pi/Documents/openContent.sh /media/pi index.html http:/google.com
openContent.sh는 다음과 같습니다.
#!/bash
# $1 defines path we search
# $2 defines name of file we're searching for
# $3 defines default URL if we can't find the thing we're searching for
path="$(find $1 -name $2 | head -n 1)"
if [ -f "$path" ]; then
echo "content found at $path"
chromium-browser --incognito --kiosk $path
exit
else
echo "content was not found in $1
chromium-browser --incognito --kiosk $3
fi
부팅 후 터미널에서 스크립트를 실행하면 예상대로 작동합니다. 동일한 매개변수를 사용하여 검색하면 USB에서 웹페이지가 열립니다. 존재하지 않는 이름을 검색하기 위해 임의의 이름을 지정하면 google.com이 열립니다(/media/pi에서 찾을 수 없기 때문입니다. 다 괜찮습니다).
하지만 재부팅하고 자동 실행에서 실행하면 항상 google.com으로 이동합니다. 이 줄을 바꾸면:
@sh /home/pi/Documents/openContent.sh /media/pi index.html http:/google.com
그리고:
@chromium-browser --incognito --kiosk /media/pi/DISK_IMG/index.html
그러면 페이지가 열립니다. 따라서 USB 드라이브가 늦게 로드되는 문제는 아닌 것 같으며 둘 다 작동하지 않기를 바라고 있습니다.
나는 그것이 bash 스크립트에서 또는 자동 시작에서 인수를 전달할 때 내가 잘못하고 있는 것이라고 생각하지만 무엇인지 모르겠습니다. 어떤 아이디어가 있나요?
편집하다:
sleep 30
openContent.sh 상단에 추가를 시도했는데 작동했습니다. 거기에 지연을 하드코딩하고 싶지 않기 때문에 이것은 약간 혼란스럽습니다. 이것이 찾기/USB 장치와 관련된 알려진 문제입니까? GUI/데스크톱 환경 이후에 로드되는 시간이 있나요?
이는 기본적으로 파일 시스템이 준비될 때까지 실제로 디렉토리를 조사할 수 없기 때문에 의미가 있습니다. 따라서 명시적인 URL을 전달하면 나를 신뢰하고 거기로 이동하며 거기에서 찾기 시작하면 파일 시스템이 준비되었습니다. 하지만 먼저 검색하면 거기에 아무것도 없다고 나옵니다.
답변1
그래서 드라이브의 실행과 자동 마운트 사이에 지연이 있는 것 같아서 /home/pi/.config/lxsessions/LXDE-pi/autostart
처음 1분 동안 파일을 찾고 기본값으로 돌아가도록 bash 스크립트를 수정했습니다. 이는 일반적으로 처음 몇 초 내에 트리거되므로 너무 더럽지도 않고 너무 길지도 않습니다.
특정 URL을 호출하는 것은 작동하지만 시작 시 이를 찾으려는 시도가 실패하는 이유는 크롬 시작과 마운트된 드라이브를 확인하는 파일 시스템 사이의 지연이 거의 동일하기 때문이라고 생각하므로 크롬이 시작될 때 크롬에 제공된 URL이 유효합니다. 찾기 작업을 수행할 때 파일 시스템이 드라이브를 마운트하기 전에 훨씬 더 빠르고 null을 반환하므로 Chrome이 기본 URL로 열립니다.
아래 코드는 첫 번째 작업으로 기본 파일을 연 다음 실제 파일을 찾고, 성공하면 Chrome을 종료하고, 올바른 URL로 다시 시작하여 최적화할 수 있지만 지금은 이 방법이 작동합니다.
#!/bin/bash
# $1 Defines the path that we will look in
# $2 Defines the name of the file we're looking for
# $3 Defines the path to a default file if not found
delayTime=1s
for i in {0..60}
do
path="$(find $1 -name $2 | head -n 1)"
if [ -f "$path" ];then
echo "content found at $path"
chromium-browser --incognito --kiosk $path
exit
else
echo "content was not found on attempt $i"
sleep $delayTime
fi
done
chromium-browser --incognito --kiosk $3
exit