1

我有一个在 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 不是解决这种情况的方法?

4

4 回答 4

2

离开信息亭模式

 !#/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
于 2018-08-23T17:52:57.610 回答
1

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

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

于 2016-09-21T10:21:10.763 回答
0

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

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

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

希望这可以帮助

于 2015-07-29T07:28:39.120 回答
0

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

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

  2. 安装节点

  3. 使用此脚本传递要显示为第一个参数的 url

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”

于 2021-11-10T10:26:42.823 回答