我是个菜鸟,这个任务并不像我乍一看想象的那么容易。我在一台 raspberryPi4 上Raspberry Pi OS 桌面及推荐软件已安装(与每个 ubuntu 非常相似,但 GPIO 从第一次启动开始就可以工作)。
成功之后,我编写了一个.py程序(名为按钮标签.py)改变了我的铬当物理按钮,通过树莓派的GPIO引脚连接,被按下。
我需要在系统启动时启动这个.py脚本
#name of the file: button_tab.py
import RPi.GPIO as GPIO
import subprocess
import time
GPIO.setmode(GPIO.BOARD)
buttonPin = 36
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
while True:
buttonState = GPIO.input(buttonPin)
if buttonState == False:
subprocess.call(["xdotool", "key", "ctrl+Tab"])
time.sleep(0.5)
当我通过以下方式执行该程序时,它运行良好:
python3 button_tab.py
每次我按下按钮,它都会更改所选中的选项卡铬窗口就像我按下键盘键一样Ctrl+Tab,并且它有0.5秒的冷却时间,以避免同时多次触发它。
我甚至创建了一个监听按钮脚本以便通过 bash 执行它。
#! /bin/sh
echo "Starting listen-for-button.py"
python3 /usr/bin/button_tab.py
当我手动启动它时,它也能工作
./listen_for_button.sh
现在的问题是:
我需要在启动时启动这个脚本,所以我安装了所有 sudo 的 pip3 模块
(如sudo -H pip3 install subprocess.run
)并开始尝试不同的解决方案:
- 通过 crontab 运行它:(
@reboot /home/pi/listen_for_button.sh
不行) - 移动监听按钮并
/etc/init.d/
通过 来启用它sudo rcconf
(通过 安装后sudo aptitute install rcconf sysv-rc-conf
)(不行) - 感谢@Ra,我已经编辑了
sudo nano /etc/profile
~/bashrc配置文件,/bin/bash /home/pi/listen_for_button.sh
在文件底部添加了(有东西在动,但登录可能停留在我的进程上,因为没有显示桌面,只有黑屏) - 建造/lib/systemd/system/button_tab.service(剧透……没有)
#这button_tab.服务文件:
[Unit]
Description=Button Tab Service
After=multi-user.target
[email protected]
DefaultDependencies=false
[Service]
Type=simple
Environment="PATH=/home/{{ user }}/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=/usr/bin/python3 /usr/bin/button_tab.py
Restart=on-abort
User=pi
[Install]
WantedBy=multi-user.target
并通过以下方式启用它:
sudo systemctl daemon-reload
sudo systemctl enable button_tab.service
sudo systemctl start button_tab.service
进程运行正常(通过 询问状态时亮绿灯sudo systemctl status button_tab.service
),但即使进程正在运行,按钮也不起作用。我尝试了不同的 .service 文件构造:这是最后一个版本。对 .service 文件的所有更改都产生了相同的结果:不行
我发现让按钮起作用的唯一方法是手动启动或按钮标签.py脚本或监听按钮脚本。
所有自动化方法均不起作用。
可能我忽略了一些基本的东西,比如 xdotool 的行为......我真的不知道!
请,我援引sudo help
感谢
答案1
解决了!感谢 @Ray 的评论,足以做到这一点:
sudo nano /etc/profile
并添加到文件底部:
nohup /bin/bash /home/pi/listen_for_button.sh
这样做后,~/bashrc 会在后台执行 .sh 文件,没有任何输出。因此登录过程可以顺利进行,并且 .sh 文件就像由用户执行一样 <3
我希望这可以帮助别人。祝一切顺利
答案2
最简单的方法。编辑sudo nano /etc/rc.local
并添加sudo python3 /home/pi/sample.py &
之前的内容exit 0
,然后重新启动。