使用PiControl远程控制你的Raspberry Pi

PiCockpit 的 PiControl 功能强大,您只需点击按钮,即可从任何网络浏览器远程控制您的 Raspberry Pi。
您将看到命令的状态和输出。
只需编辑 Raspberry Pi 上的 JSON 文件,即可添加新命令。
在本文中,我们将向您展示如何实现这一功能,并为您提供一些使用 PiControl 构建的想法!
它看起来像什么?
你会注意到,默认情况下,Raspberry Pi 包含并可立即使用三个命令:关机、重启、升级客户端。

我可以用Raspberry Pi和PiControl做什么?
这里有一些你可以用它建造的东西。这些想法需要一些研究,可能还需要你的编码和/或硬件知识;无论如何,PiCockpit的PiControl将帮助你完成项目中易于使用的网络界面部分,并为你节省大量的时间,使其在互联网上运行。
- 使用Raspberry Pi相机模块拍摄快照,并将其邮寄给你。
- 启动你的Raspberry Pi Minecraft服务器,并同时停止它
- 使用omxplayer播放视频(你也可以为视频设置一个无限循环,如果你想切换到另一个视频,可以停止视频循环)。
- 使用Raspberry Pi相机模块,为定格动画相机创建一个简单的控制。
- 利用局域网唤醒功能唤醒与你的Raspberry Pi在同一网络中的本地计算机
- 发出声音(例如,作为万圣节的恶作剧)。
- 通过Z-Wave等发出适当的控制命令,打开一扇门--例如车库门。
- 在你的Raspberry Pi上启动SSH服务,并将其关闭--这是一种 "敲开 "的方法,可以提高安全性。
- 控制模型火车
- 开启和关闭继电器(需要两个按钮,或者可以使用 "切换 "按钮)。
- 使用红外LED控制电视(切换频道、改变音量......),例如,在你旅行时模拟活动。
- 从网络界面发射火箭
我们将公布其中一些项目想法的分步说明,这样你就有了一个简单的指南来开始使用PiControl和远程控制你的Raspberry Pi。
如何用PiControl为Raspberry Pi添加额外的远程命令按钮?
你可以通过简单地编辑Raspberry Pi上的JSON文件,轻松而安全地定义你自己的命令。这样做是出于安全考虑--我本来可以通过写PiCockpit的方式让你从web界面添加命令,但如果有人知道你的PiCockpit密码,他们就可以创建任何他们想要的命令。因此,请按照这些简单的说明,在你的Pi上创建一个新的JSON文件。
注意:这些说明是特意保留的,没有使用命令行经验的用户可以遵循。如果你知道如何使用命令行,你可能会发现直接创建文件并使用nano编辑它更容易/更快。
首先,你需要在超级用户模式下打开文件浏览器(这一步可以保证你的PiCockpit PiControl配置文件的安全,防止任何用户或应用程序想篡改它们)。点击Raspberry Pi OS菜单,在这里点击 "运行... "命令。

以root身份运行pcmanfm(sudo pcmanfm),键入"sudo pcmanfm"(不含引号),然后点击 "确定"。

一个新的窗口打开,显示/home/pi目录的内容。

注意:您应该看到这个图标,就在 "文件 "菜单下。它表示您是以root用户的身份使用pcmanfm,因此应该格外小心(因为root可以编辑/删除/移动任何文件!即使是对系统正常运行至关重要的文件)。

不用担心,我们在这里只接触你需要的文件 🙂
在你的Raspberry Pi上打开以下目录。
/etc/picockpit-client/apps/com.picockpit/picontrol/modules

提示:你也可以复制和粘贴我上面给出的路径,然后按回车键导航到该目录。
Raspi Berry的有用的Raspberry Pi提示
右键单击现有文件旁边的空白区域,并选择 "新文件..."。

调用新文件ssh-server.json。


现在,你需要右键单击新文件,调出右键菜单。选择 "Geany":


现在,你可以看到我们刚刚创建的新文件了。不过,现在它还是空的。
让我们创建两个新的命令,一个用于关闭SSH服务器服务,另一个用于启动它。在Geany显示的文本字段中输入以下内容。
{
"name": "SSH commands",
"icon": "mdi-ssh",
"handle": "ssh",
"description": "Control the SSH server",
"commands": {
"ssh-stop": {
"name": "SSH Server off",
"icon": "mdi-server-minus",
"description": "Shuts the SSH service down",
"confirm": true,
"user": "root",
"command": ["service", "ssh", "stop"]
},
"ssh-start": {
"name": "SSH Server on",
"icon": "mdi-server-plus",
"description": "Starts the SSH service",
"user": "root",
"command": ["service", "ssh", "start"]
}
}
}

在这一点上,我们应该保存该文件。你可以从Geany的文件菜单中做这件事,例如,选择保存。(或者使用Ctrl + S)。

此时,我们的新命令尚未出现在网络界面上。此时,您需要重启 picockpit-client。点击 Raspberry Pi OS 菜单中的 "运行... "命令,然后输入" "。sudo service picockpit-client重启"进入窗口,然后点击确定。

现在看看你的 PiControl 网络界面:


如果你输入的内容正确,新的命令就会出现。如果你在你的JSON文件中犯了一个错误(例如,忘记了一个大括号),PiCockpit将直接忽略这个 "坏 "文件。
你现在可以试试这些命令了。如果你点击SSH SERVER OFF按钮,你会被问到你是否真的想运行这个命令。在这里也点击SSH SERVER OFF,就可以真正运行该命令了(如果你不想运行,可以点击取消)。

现在,PiCockpit 将运行该命令,您将看到进度信息,运行完成后,您将看到以下成功指示符:

如果你现在尝试使用SSH连接到你的Pi,连接将被拒绝。

通过点击 "SSH SERVER ON "来启动SSH服务器。现在,连接将再次成为可能。
祝贺你!你刚刚创建了你自己的一套命令,你可以从网络界面上运行。你刚刚创建了你自己的命令集,你可以从网络界面运行。
当你运行命令时,请留在页面上--如果你导航离开,目前的状态会被清除。为了确定SSH服务器是否正在运行,你可以建立一个PiDoctor测试--PiControl只是为了在你的Pi上执行远程操作。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
当您添加新的命令或更新命令时,请记得重新启动picockpit-client。你也可以删除你不想要的命令,例如你想删除远程关闭Raspberry Pi的功能。
远程命令语法的解释
该文件为PiControl配置了一个新模块。它有一个.JSON语法,请确保你以正确的方式打开和结束大括号,就像我的例子中介绍的那样。
有一个头,用来配置模块本身,还有命令(在 "命令 "部分)。它们有一些共同的条目。
名称
名称 "条目是人类可读的名称,会在网络界面上显示给你。
图示
图标 "条目是可选的,用于装饰你的按钮和模块。这些是Material Design图标名称,例如 "mdi-ssh"。
你可以查看一下 材料设计图标的完整列表,请点击这里.只需复制图标的名称(包括开头的mdi-)。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
描述
描述 "条目是可选的,允许你为命令或模块添加更多信息。
处理
"句柄 "条目对模块来说是明确的,而且在各模块中必须是唯一的。在命令的情况下,手柄是隐含的。"ssh-stop"和"ssh-start"是我在例子中用于命令的两个手柄。
你可以选择任何东西作为手柄,只要不包括"/"、"+"、"$"、"*"等字符。我建议坚持使用基本的小写ASCII字符,并使用"-"。句柄是 需要.
顺便说一下,你的文件可以有一个与手柄不同的文件名--我鼓励你对文件名和手柄至少使用相关的名字,这样你就可以很容易地识别你硬盘上的模块.JSON文件。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
这些命令进入""。命令"块,并有额外的配置可能性。
确认
如果 "确认" 并设置为 "true "时,PiControl 网页界面将在实际运行命令前显示一个确认对话框。这对于确保 "危险 "命令不会因意外点击或单击而执行非常有用。
用户
如果 "用户" 存在时,命令将以该特定用户的身份运行(如 根 在我们的例子中,以确保我们有足够的权限)。
PiControl将以用户""的身份运行命令。pi"的默认值。你也可以将其设置为其他权限小于" "的用户。pi“.
如果你试图运行GPIO命令,或使用omxplayer播放视频,你可能必须给你的新用户提供额外的能力。该用户 pi 默认情况下拥有这些必要的权限。通常情况下,这些权限是通过将用户添加到一个特殊组来设置的。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
指挥部
这是您应该在 Raspberry Pi 上运行的实际命令。请注意,您必须将命令中的空格替换为在命令行上运行时的空格。例如
service ssh start
应写为:
["服务", "ssh", "启动"]
PiControl还支持链式的命令序列(例如通常的apt-get update、apt-get upgrade序列)。请看core.json中的一个例子,它是如何实现的。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
总结。PiControl满足你的Raspberry Pi远程控制需求
使用PiCockpit和PiControl,真的很容易在你的Raspi上添加任何你想运行的远程命令,并能够从网络界面控制你的Pi。要做到这一点,Raspberry Pi只需要一个互联网连接 -- 你不一定要在同一个网络中.
你想用PiCockpit和PiControl建造什么?请在下面评论,我将努力帮助你完成你的项目 🙂

权力越大,责任越大--请注意您的 PiCockpit 界面的访问权限,妥善保管您的密码和 API 密钥。此外,如上文所述,确保 "保护 "危险命令,以免意外点击后被执行。
Raspi Berry的有用的Raspberry Pi(和PiCockpit)提示
你们好!
我想用picontrol按钮运行以下命令: cd /home/pi/Sensoren ; python3 SCRIPT.py
我按照描述做了,我可以按下按钮,但命令没有被执行,也不能停止进程。
有什么建议吗?
谢谢
记住,picontrol不是一个shell--所有的命令都是独立执行的。你必须使用绝对路径(cd--改变目录--在picontrol中没有用)。
启动一个Python脚本可以正常工作,例如。
"命令"。["python3", "/home/pi/do_something.pyc"]
但是,如果这个脚本后来启动了一个像Chromium这样的图形用户界面的应用程序,或者直接启动了Chromium,我就会遇到问题。
"命令"。["chromium-browser"] 结果是 "无法打开X显示器。".
如何启动需要X显示的脚本或应用程序?
我在这里写过更多关于这个问题的文章。
https://pi3g.com/2020/05/19/chromium-exit-code-5/
基本上你需要告诉应用程序使用哪种X显示器。
在Chromium的情况下,它是通过一个标志来完成的
Chromium-browser -display=:0 -kiosk https://picockpit.com
注意,-kiosk是在kiosk模式下启动浏览器。只是把它作为一个额外的信息扔进去。
注二:这些参数是两个破折号--WordPress把它们改成一个长破折号,我相信。
对于其他应用程序,你将需要检查。这通常是通过设置一个环境变量来完成的。
对于PiCockpit来说,你可能需要写一个bash脚本来设置这个变量,然后启动应用程序。
然后运行bash脚本。
如果你在这方面有任何成功经验,请与我们分享。
最大
另外,关于Chromium的命令行开关,请看这两个链接。
http://peter.sh/experiments/chromium-command-line-switches/
https://www.chromium.org/developers/how-tos/run-chromium-with-flags
嗨,我刚刚用你们的软件和基础设施设置了一个命令,它非常棒!我很高兴。非常感谢你的这个简单而又易于使用的软件。如果你有空的话,我想得到一点建议。基本上,我把我的Pi设置为从睡眠中唤醒我的电脑,你的软件允许一个简单的网络界面用etherwake命令来唤醒电脑,这很有效,但是我想有一个更快的方法来立即执行这一个命令。你认为有什么方法可以做到这一点吗?目前,为了唤醒我的电脑,我必须登录,然后进入我的命令,然后在弹出的对话框中选择按钮,但如果有一个api或一个快捷方式,基本上可以一键运行命令,那将会很有帮助。无论如何,非常感谢你的帮助。非常棒 🙂
谢谢你的功能建议,我已经把它加上了。我们正计划在一段时间内做一个唤醒的应用程序,也许它可能会更方便一些。
Hallo,
wie kann ich zum Beispiel Abfragen wie (Do you want to continue? [Y/n]) über das Script mit "Y" bestätigen?
谢谢你!
你好,哈格先生。
这是一个非常好的问题。有一些程序,如apt-get,已经有了一个完整的程序。 -假设-是 选项,它可以让你在非交互式模式下使用。这通常是在脚本中使用,而不是在手写的情况下使用。另外还有经典的Unix系统。是'程序,使你能够实现自己的结果。例如,通过以下方式。
yes | sudo apt upgrade
根据我的实际情况,我应该把这两种方法中的一种变成一种好的解决方案。Ansonsten können Sie uns gerne noch einmal schreiben!
你好,你能从picockpit使用RPi终端吗?
还没有,计划在未来的版本中推出。(截至19.4.2023)
并非上述网站的所有图标都可以使用/工作。
如何使用4.9.95版之后的新图标,例如'mdi-lamps-outline'?
我们正在更新前台的代码。我将与我们的开发人员分享您的意见,可能他们会在下次更新之前研究这个问题,以使图标达到最新的版本。
您好,我们已经更新了前端,这意味着您现在可以使用最新版本的 Material Design Icons 图标。今后,我们还将不断更新字体版本。
[...] 点击此处:了解如何在 PiControl 中设置自己的命令。[...]
[...]帮助您控制 Pi 的管理工具全部正常工作。其中包括 GPIO、PiControl、PiDoctor 和 PiStats 应用程序。也许你可以用一种简单的方法来设置新安装的 64 位 SSH 服务器?或者启动和停止你设置的媒体中心?发送 WoL 消息?你可以在这里找到我们的软件提供的各种可能性的详细介绍。[...]
apt-get -just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\s\(([\w,\-,\d,\.,~,:,\+]+)\)?/i) {print "PACKAGE:$1 INSTALLED: $2 AVAILABLE: $3\n"}'
上述命令在 SSH 下运行正常,但 PiControl 出现问题并报告:
(100) E:命令行选项 "n"[来自 -ne]与其他选项组合时无法理解。
我认为我正确地转义了 JSON 格式,因为 PiControl 中显示的命令与我转义并将空格分割成不同字符串的命令相同。
JSON:
{
"名称":"CISO 更新命令"、
"图标":"mdi-更新"、
"把手":"CISO"、
"描述":"CISO安装所有更新"、
"命令":{
"ciso-更新":{
"名称":"CISO 更新"、
图标"mdi-server-minus"、
"描述":"更新软件源中所有软件包的列表,并升级所有已安装的软件包"、
"确认":true、
"用户":"root"、
"命令":[
[
"apt-get"、
"更新"
],
[
"apt-get"、
"升级"、
"-y"
],
[
"apt-get"、
"-just-print"、
"升级"、
"2>&1",
“|”,
"perl"、
"-ne"、
"'如果'"、
“(/Inst\\s([\\w,\\-,\\d,\\.,~,:,\\+]+)\\s\\[([\\w,\\-,\\d,\\.,~,:,\\+]+)\\]\\s\\(([\\w,\\-,\\d,\\.,~,:,\\+]+)\\)?”,
"/i)",
"{打印
"PACKAGE:"、
“$1”,
"安装:"、
“$2”,
"可用:"、
"$3\n\"}'"
]
]
}
}
}
Hallo,
我尝试了使用 picockpit 的前几个步骤,但仍无法在 Fernsteuerung 上运行。
在终端上直接连接应用程序
"geany":{
"名称":"EditorG"、
"图标":"mdi-application-edit-outline"、
"描述":"文本编辑器"、
"确认":true、
"notermination": true、
"用户":"root"、
"命令":["geany"]["geany"]
},