我试图在Raspberry Pi启动时执行脚本。我希望网络浏览器自动打开。
我试图找到一个简单的解决方案,(例如将我的脚本放在“启动”目录或类似的目录中),但没有看到类似的东西。
我已经调查了Upstart,但是我正在努力了解它是如何工作的。当我测试它们时,我尝试过的所有脚本均无效。
我试图在Raspberry Pi启动时执行脚本。我希望网络浏览器自动打开。
我试图找到一个简单的解决方案,(例如将我的脚本放在“启动”目录或类似的目录中),但没有看到类似的东西。
我已经调查了Upstart,但是我正在努力了解它是如何工作的。当我测试它们时,我尝试过的所有脚本均无效。
Answers:
要在启动时运行Midori,请看一下本教程。有关DIY解决方案,请继续阅读。
您可以添加可执行脚本命令的底部.bashrc
,将运行脚本,每次打开一个终端(或运行的新实例bash
)。
确保您位于pi
文件夹中:
$ cd ~
创建文件并编写脚本以在文件中运行:
$ sudo nano superscript
保存并退出:Ctrl+ X,Y,Enter
打开.bashrc
进行配置:
.bashrc
是不是打算运行的脚本。每次启动非登录交互式外壳程序时,它将运行一次,并用于配置外壳程序。
~/.bashrc: executed by bash(1) for non-login shells
。
$ sudo nano .bashrc
向下滚动到底部并添加以下行: ./superscript
保存并退出:Ctrl+ X,Y,Enter
如果您正在寻找可在控制台启动时使用的解决方案,请查看此链接。基本概要:
为启动脚本创建一个文件,并将脚本写入该文件中:
$ sudo nano /etc/init.d/superscript
保存并退出:Ctrl+ X,Y,Enter
使脚本可执行:
$ sudo chmod 755 /etc/init.d/superscript
注册要在启动时运行的脚本:
$ sudo update-rc.d superscript defaults
如果您希望在启动到LXDE环境时运行脚本,可以查看以下Raspberry Pi论坛帖子:
导航 ~/.config/lxsession/LXDE-pi
打开该autostart
文件夹中的文件:
$ sudo nano autostart
添加@midori
新行。如果要运行类似python脚本的内容,请@python mypython.py
在新行中添加类似内容。运行脚本文件可能是@./superscript
,但是由于某种原因,脚本会无限循环运行(也许这会停止该循环)。
保存并退出:Ctrl+ X,Y,Enter
将您的Raspberry Pi重新启动到LXDE环境中。
$ sudo startx
?
.bashrc
当系统启动或用户登录时,仅在打开新终端时才会读取(在用户每次打开新终端时都会读取)。我很困惑这个答案得到了很多赞扬:第一部分是完全错误的。第三部分正确执行GUI程序。
我见过的大多数人(在Raspberry Pi论坛上看过)并成功完成自己的工作方式就是使用/etc/rc.local
。
您在这里需要做的所有事情都放在./myscript
rc.local文本文件中。如果在python中,则放入python myscript.py
。
从字面上看,这是“一个简单的解决方案,(例如将我的脚本放在某个“启动”目录或类似的目录中”)-也许在您也有疑问时在论坛上进行搜索,此解决方案来自于a的前4个结果谷歌搜索!
python myscript.py
。如果你想使用chmod + X,并添加#! /bin/python
,您可以通过运行该脚本$pathtofile/myscript.py
,其中$pathtofile
是.
,如果你在同一个目录或绝对或相对路径的文件是。
/etc/rc.local
仅用于启动系统服务(不具有用户界面的程序)。
crontab在定义的时间运行命令。
编辑文件:
sudo crontab -e
在文件中添加一行(这里是python脚本):
@reboot python3 /home/pi/Desktop/exemple.py &
/etc/rc.local
仅用于启动没有用户界面的程序。
如果您要启动的脚本需要一个xorg会话,那么您可以尝试遵循freedesktop autostart规范,该规范可能会或可能不会生效,具体取决于您所使用的桌面环境。
或者,您可以按照https://wiki.archlinux.org/index.php/autostarting中的描述来针对特定的桌面环境。
如果脚本适合守护程序或“服务”的描述,并且系统正在运行systemd(对于raspbian和大多数现代linuce都是这种情况),则可以将脚本配置为作为systemd服务运行-这可以对生命周期和执行环境,以及(重新)启动脚本的前提条件,例如网络正在运行。还可以配置服务重启以防万一出现故障(Restart=always
,以及重启之间的延迟,例如RestartSec=10
)。
为了在整个系统范围内使用,请在下创建您的systemd单位文件/etc/systemd/system
,例如vim /etc/systemd/system/autossh.service
:
[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
也可以看看:
[ unit
]配置
现在我们可以测试服务了:
systemctl start autossh
检查服务状态:
systemctl status autossh
停止服务:
systemctl stop autossh
验证服务正常运行后,请通过以下方式启用它:
systemctl enable autossh
注意:为了安全起见,
systemd
将在受限环境中运行脚本,类似于crontab
运行脚本的方式,因此,请勿对预先存在的系统变量做任何假设。Environment
如果您的脚本需要定义特定的变量,请使用键。set -x
在bash脚本的顶部添加然后运行,systemctl status my_service
可能有助于确定脚本失败的原因。通常,始终对包括echo
和的所有内容使用绝对路径cat
,或显式定义$ PATH。
我想投入两分钱,尽管这是一个老问题,但通常被要求做简单的事情-自动启动。我对此问题的所有答案都尝试了所有建议的解决方案。他们都没有为我工作。我正在将Raspberry PI Model 2与Raspbian一起使用。
我可以让我的应用程序成功自动启动的唯一方法是通过脚本,如下所示。我说成功是因为我的应用程序按预期启动,而没有像从错误的工作路径开始那样的问题。
1.创建一个扩展名为.sh的空文件,并根据需要命名。
2.完全复制并粘贴以下内容,除了将“您的应用程序名称”更改为刚创建的脚本名称。
#! /bin/sh
### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
### END INIT INFO
#change /direct/path/to/your/application to the path your application is in.
cd /direct/path/to/your/application # example cd /home/pi/myprogram/
#change YourProgramExactName to Exact name of your program that you want to auto start
./YourProgramExactName
exit 0
然后,将脚本文件保存在您的应用程序文件夹中
然后,打开/home/pi/.config/autostart
文件夹。您的情况可能有所不同。只需打开您的主文件夹并启用查看隐藏的文件夹。打开.config/autostart
。如果看不到自动启动文件夹,请在.config文件夹中创建一个名为自动启动的文件夹。
在autostart文件夹中,您将需要创建一个到您的脚本文件的快捷方式,该脚本文件如下创建。创建一个扩展名为的空文件.desktop
。
复制并粘贴到空的桌面文件下面,除非你将需要改变Comment
,Name
,Exec
,Path
和Icon
字段的值。
[Desktop Entry]
Comment=
Exec=/path/to/Your/application/Name-of-the-script-file (.sh)
Icon=/Path/to/Your/application/Icon/IconName
Name=YourApplicationEXACTNAME
Path=/Path/to/Your/Application-ONLY
Type=Application
更改所有必要字段后,保存并关闭文件。大功告成 只是测试一下。
/usr/local/bin/ApplicationName
...?
home
如果是单独的设备)存在问题的情况下,脚本(或可执行文件)文件在以下情况下均不可用时不会出现问题:系统故障回到单个用户/bin/sh
外壳!如今的systemd
方式是能够安装/
和/usr
PID 1日前开始...
要在登录时自动启动命令,请将命令放入一个名为
.bashrc
在用户目录中(例如/ home / pi)
.bashrc
是不是打算运行的脚本。每次启动非登录交互式外壳程序时,它将运行一次,并用于配置外壳程序。
~/.bashrc: executed by bash(1) for non-login shells
。
例如,文件可能包含
chromium-browser --kiosk www.google.com
以全屏形式启动指向网站www.google.com的Chromium
这个解决方案真的很好。浏览器加载后,屏幕左上方会出现一个黑色小方块,这似乎是一个常规错误(其他人在论坛上提到了该错误),但全屏模式会隐藏浏览器页面以外的所有内容。
编辑自动启动文件:
sudo nano /etc/xdg/lxsession/LXDE/autostart
在每行的开头使用“#”注释掉所有内容,然后添加以下行
@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com
如有必要,请使用配置工具启用开机时自动运行GUI
sudo raspi-config
如果需要退出,请返回命令提示符 CTRL+ ALT+F1
CTRL+ ALT+F2
这通常是我要做的。
编辑文件:
sudo nano .bashrc
.bashrc
是不是打算运行的脚本。每次启动非登录交互式外壳程序时,它将运行一次,并用于配置外壳程序。
~/.bashrc: executed by bash(1) for non-login shells
。
转到文件末尾并输入:
sudo python mycode.py
如果要将输出存储在txt文件中,请按照以下步骤在步骤3中编辑代码:
sudo python mycode.py >> output.py
希望这可以帮助!
.xinitrc
或.xsession
文件中。