gpt4 book ai didi

Linux 脚本在重启后无法正常执行

转载 作者:行者123 更新时间:2023-12-05 05:41:46 26 4
gpt4 key购买 nike

我正在使用带有 32 位 Raspbian 的树莓派 pi4 来显示一些网页。我有一个脚本可以打开 2 个网页,每个显示器一个。脚本的末尾选择其中一个页面并输入登录凭据。该脚本效果很好,我让它与 systemctl 一起使用以在重新启动时自动启动。问题是脚本并不总是在我的 pi 重新启动后选择窗口。它有 50% 的时间有效。我相信这恰好是第一个打开的页面。有时光标会留在正确的页面上。无论我是否使用 systemctl,都会发生这种情况。

它似乎忽略的行是:

xdotool search --name 'Login'>xdotool windowactivate

我所做的故障排除:

  • 重启后等待很长时间 - 这没用
  • 将 windowactivate 更改为 windowfocus - 这没什么区别
  • 删除 --kiosk 标志 - 这没有用
  • 关闭窗口并再次运行脚本 - 随后每次都有效
  • 打开浏览器并在重启后关闭它,然后运行脚本 - 随后每次都有效

这让我进入了下一步,即在打开浏览器之间添加一个 sleep 。我希望一旦第二个浏览器打开,它就会保留为事件浏览器。不幸的是,这巩固了我的结论,即脚本在重启后无法正常执行。

添加 sleep 后,浏览器在重新启动后同时打开,忽略 sleep 命令。但是,如果我关闭浏览器并再次运行脚本, sleep 命令将起作用,并且 1 个浏览器打开,然后另一个浏览器在 sleep 后打开。

  • 然后我尝试在脚本开头添加以打开浏览器并然后关闭它,然后继续执行脚本 - 这没有用。

几乎就好像忽略了浏览器的打开和关闭?我尝试用 sleep 缓冲这 2 个命令,但它也忽略了这些命令。

该脚本在第二次运行时或在打开和关闭浏览器后 100% 有效。

下面是我的脚本。

#!/bin/bash
xset s noblank
xset s off
xset -dpms

unclutter -idle 0.5 -root &

sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences
rm -rf ~/.config/chromium/Singleton*

/usr/bin/chromium-browser --new-window --noerrdialogs --disable-infobars --kiosk --user-data-dir="/tmp/1" --window-position=0,0 'http://ExampleDisplay.com' &
/usr/bin/chromium-browser --new-window --noerrdialogs --disable-infobars --kiosk --user-data-dir="/tmp/2" --window-position=2500,0 'http://ExampleLogin.com' &

sleep 7
xdotool search --name 'Login'>xdotool windowactivate
sleep 2.5
xdotool type 'TEST' # CHANGE THIS FOR DIFFERENT LOGIN
sleep .2
xdotool key 'Tab'
sleep .2
xdotool type 'TEST' # CHANGE THIS FOR DIFFERENT LOGIN
sleep .2
xdotool key 'Return'
sleep 4
xdotool type 'TESTORG' # CHANGE THIS FOR DIFFERENT ORGANIZATION
sleep .2
xdotool key 'Tab'
sleep .2
xdotool key 'Tab'
sleep .2
xdotool key 'Tab'
sleep .2
xdotool type 'TESTSTATION' # CHANGE THIS FOR DIFFERENT STATION
sleep .2
xdotool key 'Return'

为了排除脚本的其他部分,我尝试将其简化为使用此脚本一个接一个打开浏览器的最基本问题。这有同样的问题:重新启动后,它会打开两个浏览器而忽略 sleep 功能。然后,如果再次运行,它将起作用。

#!/bin/bash
/usr/bin/chromium-browser --new-window --noerrdialogs --disable-infobars --kiosk --user-data dir="/tmp/1" --window-position=0,0 'http://ExampleDisplay.com' &
sleep 5
/usr/bin/chromium-browser --new-window --noerrdialogs --disable-infobars --kiosk --user-data-dir="/tmp/2" --window-position=2500,0 'http://ExampleLogin.com' &

最后,这是我的 systemctl(不需要,因为无论使用 systemctl 都会发生,但以防万一)

[Unit]
Description=Chromium Kiosk
Wants=graphical.target
After=graphical.target

[Service]
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=forking
ExecStart=/bin/bash /home/pi/kiosk1.sh
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=graphical.target

作为旁注,我尝试了另一种解决方案,使用 python 脚本打开浏览器,使用来自 https://github.com/foxxyz/multibrowse 的 multibrowse.py 脚本即使在 python 脚本中的浏览器之间添加 sleep 调用时也有同样的问题。

最佳答案

我不使用 xdotool,但怀疑您想要:

xdotool windowactivate $(xdotool search --name 'Login')

希望这意味着您将激活名称为“登录”的窗口,xdotool search ... 找到了它。

关于Linux 脚本在重启后无法正常执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72235281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com