미도리 자동 새로 고침


11

Raspberry Pi를 사용하여 비 대화식 웹 키오스크를 만듭니다. 특정 웹 페이지 (원격 모니터링 스테이션에서 측정)가 전체 화면 모드로 화면에 표시되고 AJAX를 통해 콘텐츠가 자주 새로 고쳐집니다.

이제 Raspberry를 키오스크로 만드는 데는 몇 가지 해결책이 있으며, 제대로 할 수 있다고 확신하지만 키오스크는 유지 보수가 필요 없습니다. 특히 전원이 꺼졌다가 다시 켜지는 상황에서는 라우터 / 모뎀 / 네트워크 인프라가 온라인 상태가되지 않았습니다.

이러한 상황에서 Midori는 "연결할 수 없음"또는 이와 유사한 내용의 페이지를 표시하며 자체 자동 새로 고침 메커니즘을 포함한 웹 페이지를로드하지 못했기 때문에 누군가 전원을 다시 켤 때까지 이와 같이 멈출 것입니다!

이제 네트워크를 다시 사용할 수있을 때 또는 비슷한 효과를 낼 때 Midori가 페이지를 강제로로드 할 수있는 방법은 무엇입니까 (항상 15 분마다 자동 새로 고침 또는 페이지가로드 될 때까지 계속 새로 고침)?

Midori에서 해당 옵션을 사용할 수없는 경우 다른 솔루션을 권장 할 수 있습니까?


지금은 Pi에 액세스 할 수없고 Midori에도 액세스 할 수 없지만 Midori는 dbus를 지원할 수 있습니까? qdbus패키지에서 실행 libqt4-dbus하거나 비슷한 도구를 사용하여 Midori를 찾을 수 있습니다. 그러면 페이지를 새로 고칠 수 있습니다.
Arne

더 나은 : 미도리는 무언가 내장되어있는 것 같습니다 . 어쩌면 당신은 그것을 시도하고 여기에 답변을 게시 할 수 있습니다.
Arne

내 대답이 유용하지 않습니까? 파이썬 대신 bash 스크립트를 작성 하시겠습니까? crontab을 사용해야하는 경우 응답 할 수있는 오류가 있습니까?
xxmbabanexx

@ xxmbabanexx : 유용했고 더 나은 것이 나타나지 않으면 분명히 받아 들일 것입니다. 완전히 개발되면 게시 할 대체 솔루션을 찾았습니다. 나는 여전히 페이지가 정상적으로 작동하면 새로 고침을 수행하지 않는 솔루션을 누군가가 생각해 내기를 바라고 있습니다.
SF.

@sf. 추가 정보에 감사드립니다. 수학 숙제를 마치면 네트워크 연결 확인을 포함하도록 스크립트를 편집합니다.
xxmbabanexx

답변:


6

시스템에 Python이 있다고 가정하면에 대한 대안이 cron있습니다. 5 분마다 Midori를 다시로드하는 빠른 Python 2.7.3 스크립트를 작성했습니다.

#This program reloads midori every 5 minutes

#Redifine the variables below as you see fit

rest_time = 300 #Rest time is set to 300 seconds (5 minutes) 


import subprocess as sub #Imports terminal commands (needed for reload)
from time import sleep #Import sleep (allows an infinite loop to become dormant)

while True: #This is an infinite loop. This means that our script won't stop.
    sub.call(["midori", "-e", "Reload"]) #This forwards our command to the terminal
    sleep(rest_time) #Wait rest_time second(s), then start the loop again. 

휴식 시간을 변경해야하는 경우 rest_time변수 를 변경하기 만하면 됩니다.

새로운 스크립트

"스마트 한"프로그램이 필요하다고 말했듯이 프로그램을 편집했습니다. 이 프로그램을 사용할 때는 Midori를 수동으로 열지 마십시오. 스크립트에서 엽니 다. 그렇지 않으면 스피드 다이얼러로 인해 충돌하는 이상한 습관이 있습니다. 또한 Python 2.7.3에서 실행됩니다. 해당 복사 및 붙여 넣기를 모두 수행하지 않으려면 코드의 pastebin을 방문하십시오 .

"""
Midori Kiosk Reloader.
Created by xxmbabanexx

NOTE: This program opens Midori automatically. DO NOT OPEN IT MANUALLY, SIMPLY CLICK ON THIS PROGRAM.

KEYS

1 = Connection Complete. All is well.

0 = Connection Incomplete. Something is wrong.
"""


#Change these variables to your liking.

host = "www.google.com" #Put your desired host URL/IP between the quotes

port = 80 #Set to default port of 80. If your host uses something else, please change it.

recheck_time = 10 #The number of seconds the program will wait to ping the server. Change this at your leisure. 

page_to_open_to = "www.google.com" #This is the webpage the kiosk will open to. Put the url between the quotes.


#Excersise caution when changing these vars.

last = -1 #undefined state
up = -1 #Undefined state



"""
#---------------- Main code. Do NOT touch unless you KNOW what you are doing. ------------
"""
#Import modules

import subprocess as sub
from time import sleep
import socket
import threading

sub.Popen(["midori", "-a", page_to_open_to]) #open midori


#Check if internet is up
addr = (host, port) #the connection addr


while True:
    last = up #reset checking var
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create socket
    try: #attempt to ping, change vars
        s.connect(addr)
        up = 1
        print "\n"
    except socket.error: #if error when pinging, change vars
        up = 0
        print "\n"

    print "LAST CHECK:", last
    print "CURRENT CHECK:", up
    if last == 0 and up == 1:
        print "Reloading Midori.\n"
        sub.call(["midori", "-e", "Reload"])
    s.close()


    sleep(recheck_time)

8

누군가가 와서 업데이트 된 답변을 찾고있는 경우를 대비하여 Midori에는 이제 명령 줄 옵션 --inactivity-reset=SECONDS(또는 -i짧게)이 있습니다.

-a옵션 과 함께 x 초마다 키오스크 모드로 브라우저를 지속적으로 다시 시작할 수 있습니다.

예 :

미도리 -a http://www.google.com/ -i 120 -e 전체 화면

전체 화면 창에서 http://www.google.com/ 을 열고 2 분 동안 활동이 없으면 페이지를 새로 고침합니다. ( -e명령을 실행)


4

나는 브라우저 측면에서 다른 측면에서 접근하기로 결정했습니다.

브라우저는 특정 로컬 문서를 가리키는 키오스크 모드로 시작됩니다.

watchdog.html

<!DOCTYPE html>
<html>
    <head>
        <title>Monitoring</title>
        <script type="text/javascript">
        <!--
        var reload_url="http://example.org/watched.html";
        var to = 10000;  // Watchdog timeout: 10s.
        var wd;
        var ifr;
        function setup_watchdog()
        {
            ifr=document.getElementById("frame1");
            window.onmessage = function(e){
                if (e.data == 'tyrp') {
                    window.clearTimeout(wd);
                    wd = window.setTimeout(wdf,to);
                }
            };
            ifr.src = reload_url;
            wd = window.setTimeout(wdf,to);
        }

        function wdf()
        {
            ifr.src = reload_url;
            wd = window.setTimeout(wdf,to);
        }
        // -->
        </script>
    </head>
    <body onload="setup_watchdog()" style="margin: 0; overflow: hidden;">
        <iframe id="frame1" src="#" 
        style="position:absolute; left: 0px; width: 100%; top: 0px; height: 100%; margin:0; padding:0; border:0px none transparent;"></iframe>
    </body>
</html>

이제이 파일에서 시간 종료 값은 원격 페이지의 두 가지 정상 자동 새로 고침과 일부를 포함하도록 조정되며 reload_urlURL로 설정됩니다.

원격 페이지에는 새로 고침이 올바르게 수행 될 때마다 실행되는 스 니펫이 있습니다.

try {
    window.top.postMessage('tyrp', '*');
} catch(e){}

나쁜 일이 발생하면 페이지가로드되지 않거나 404로로드되거나 오류 또는 자바 스크립트가 어떤 이유로 든 중지되거나 일부 도용 리디렉션으로 인해 다른 페이지로 이동합니다. 두 개의 연속 새로 고침 메시지가 도착하지 않으면 워치 독 프레임이 URL을 재설정합니다 자동으로 다시로드를 수행하는 원본으로

try ... catch는 postMessage를 지원하지 않을 수있는 이전 브라우저의 문제를 방지하는 것입니다. 환경을 제어하고 항상 올바른 브라우저가 사용되도록 보장 할 수 있기 때문에 키오스크에는 문제가되지 않습니다. OTOH, 프레임이없는 메시지를 수신하는 임의의 클라이언트 컴퓨터에서 postMessage 작업은 스크립트 중단 오류가 발생하지 않는 한 작동하지 않습니다. 따라서 시도하십시오.


3

xdotool을 사용하여 f5 키 누르기를 시뮬레이션합니다.

pi@data-integrity-pi ~/log $ cat ~/bin/refresh_kiosk.sh
DISPLAY=:0 xdotool search --name ci-monitor windowactivate --sync key F5 >> ~/log/tmp.log 2>&1

그런 다음 crontab에서 매분마다 해당 스크립트를 실행합니다.

 */1 *   *   *   *    /home/pi/bin/refresh_kiosk.sh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.