如何通过 ssh 在 Chromium kiosk 模式下更改 url

Posted

技术标签:

【中文标题】如何通过 ssh 在 Chromium kiosk 模式下更改 url【英文标题】:How to change url on Chromium kiosk mode via ssh 【发布时间】:2015-09-29 03:52:09 【问题描述】:

我有一个在 Kiosk 模式下运行的 Chromium。 我想通过 SSH 更改页面的 URL

如果不是 Kiosk 模式,我会使用 xdotool:

export DISPLAY=":0"
WID=$(xdotool search --onlyvisible --class chromium|head -1)
xdotool windowactivate $WID
xdotool key ctrl+l
xdotool type 'www.example.org'
xdotool key Return

但这不起作用。可能是因为它处于信息亭模式。

除此之外,我的 xdotools 工作正常

export DISPLAY=":0"
WID=$(xdotool search --onlyvisible --class chromium|head -1)
xdotool windowactivate $WID
xdotool key ctrl+F5

刷新我的页面

也许 xdotool 不适合这种情况?

【问题讨论】:

您是否尝试发出命令“chromium-browser $URL”?通常,窗口会附加到现有窗口(在新选项卡中)并打开指定的 URL。 【参考方案1】:

离开自助服务终端模式

 !#/bin/sh
    export DISPLAY=":0"
    WID=$(xdotool search --onlyvisible --class chromium|head -1)
    xdotool windowactivate $WID
    xdotool key F11
    xdotool key ctrl+l
    xdotool type 'www.google.com'
    xdotool key Return 
    xdotool key F11

【讨论】:

【参考方案2】:

您可以在 ssh 会话中尝试 xdotool getmouselocation,通过 VNC 查看器试验位置。输出如下: x:543 y:21 screen:0 window:20975913

然后自动点击鼠标,例如 xdotool mousemove 543 21 xdotool click 1 xdotool mousemove 543 136 xdotool click 1

【讨论】:

【参考方案3】:

在 Kiosk 模式下不起作用的原因是该模式下没有地址栏。

所以 xdotool 正在工作,但是当您按 Ctrl+L 时没有打开任何内容,因此无法输入地址并因此加载。

我目前也在寻找一种在 Kiosk 模式下更改 url 而无需重新启动 PI 的方法

希望对你有帮助

【讨论】:

这很有意义!目前我正在通过一个带有 javascript 元刷新 iframe 的 html 文件绕过它。如果有兴趣,我可以分享此代码。 请问我有兴趣吗【参考方案4】:

我找到了一种使用 node.js 的方法

    使用远程调试器选项启动 chromium: chromium-browser --kiosk --remote-debugging-port=9222

    安装节点

    使用此脚本将您要显示的网址作为第一个参数传递

const WebSocket = require("ws");
const  createLogger, format, transports  = require('winston');
const  combine, timestamp, label, printf  = format;

const myFormat = printf(( level, message, label, timestamp ) => 
    return `$timestamp [$label] $level: $message`;
);

const logger = createLogger(
    level: 'info',
    format: combine(
        label( label: 'right meow!' ),
        timestamp(),
        myFormat
    ),
    defaultMeta:  service: 'user-service' ,
    transports: [
        new transports.Console(),
        new transports.File( filename: 'changUrl.log', level: 'error' ),
        new transports.File( filename: 'changUrlCombined.log' ),
    ],
);

const axios = require('axios')

var args = process.argv.slice(2);
console.log("args:" + args)
axios.get('http://127.0.0.1:9222/json')
    .then(resp => 
        const data = resp.data;
        if (data.length > 0) 
            const firstTab = data[0];
            const wsUrl = firstTab.webSocketDebuggerUrl;
            if (wsUrl) 
                //open websocket
                const wsChrome = new WebSocket(wsUrl);

                wsChrome.on('open', function open() 
                    const dataChangeUrl= 
                        id: 2,
                        method: "Page.navigate",
                        params: 
                            url: args[0] || "http://yahoo.com"
                        
                    

                    wsChrome.send(JSON.stringify(dataChangeUrl))
                    //You can use promise-ws to exit the program
                    //.then(() => process.exit())
                );
            
        
        else 
            logger.error("No tabs open")
            console.log(resp.data);
        
    )
    .catch(err => 
        // Handle Error Here
        logger.error(err);
    );

然后你可以运行“sudo node ./changeurl.js https://facebook.com”

【讨论】:

以上是关于如何通过 ssh 在 Chromium kiosk 模式下更改 url的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Android Management API 在 KIOSK 模式下允许 systemui 活动?

Chromium:在使用 Chromium 在信息亭模式下运行的 RPi 上禁用向左滑动导航?

调用新应用程序时如何保持 Android 在 Kiosk 模式下运行?

如何调试正在运行的 Kiosk 模式 Chrome 应用程序?

如何以编程方式关闭在 Kiosk 模式下运行的 Chrome?

Flutter 可以在 kiosk 模式下制作 Application 吗? [关闭]