我已按照用户文档在 wsl 中设置家庭助理:Windows 版 Home Assistant 安装。
我还使用任务计划程序和 netsh 在 Windows 11 中登录时自动转发端口。当我启动 wsl 时,我必须使用上面链接中列出的命令:
sudo -u homeassistant -H -s
cd /srv/homeassistant
python3.8 -m venv .
source bin/activate
hass --verbose
我的目标是让上述命令在登录 wsl 时自动执行,而不是键入它。我尝试为用户编辑 .bashrc 文件,并得到了一些意想不到的结果,我将尽可能合乎逻辑地总结这些结果。
我在 .bashrc 文件中添加了一个 if 语句,用于在登录时读取用户输入,如果输入等于某个短语,则我想执行上述所有命令。我尝试将上述命令仅添加到我的个人(不是“homeassistant”)用户 .bashrc,当我登录时,似乎只有第一个命令被执行,直到我输入“exit”,然后它似乎启动了 hass 服务器,但用户错误,因此它没有我的配置文件,也不会在 hass 中显示我的设备。
如果我尝试在每个命令末尾添加“&”,它将执行所有命令但不会返回成功,然后出现未找到 hass 的错误,因为它之前的命令显然失败了。
然后我尝试在每个命令后面放置一个等待命令,因为我认为它可能试图执行得太快,但这也没有解决问题。
所以最后,我只想登录,输入一个短语,如果短语与预定义短语匹配,则运行上述命令。任何帮助都将不胜感激。提前致谢
答案1
很高兴听到您找到了解决方法,但是下面还有一些其他方法可以在不修改正常启动配置的情况下完成此操作:
首先,由于(根据您的评论)您已经使用 Windows 中的任务计划程序添加了转发规则,因此您也可以简单地将其扩展为启动 hass。由于您已经有一个homeassistant
用户,并且该用户的 中有启动命令~/.bashrc
,因此只需创建一个新的登录任务来运行wsl -u homeassistant -e bash -lic "true"
。这将在用户下启动一个 WSL 实例homeassistant
,它将运行该用户 中的命令.bashrc
。
Windows 11 中的 WSL 还有一个新功能(如果您可以升级),允许您在 WSL 实例启动时运行命令。利用此功能的最简单方法是:
- 将最后 4 行(与您输入的内容相同
.bashrc
)移到下的新脚本中/home/homeassisant/hass_start.sh
:#!/usr/bin/bash cd /srv/homeassistant python3.8 -m venv . source bin/activate hass --verbose
- 使该脚本可执行(
chmod +x hass_start.sh
) - 编辑或创建(如
sudo
)/etc/wsl.conf
,其内容如下:[boot] command="sudo -u homeassistant -H /home/homeassistant/hass_start.sh"