raspberry pi_使用此脚本在网络上查找Raspberry Pi

raspberry pi

我们都去过那里。 “我将试用Raspberry Pi 。它们看起来很酷。” 然后,就像企业上的小问题一样,您突然有了Kubernetes集群NFS服务器Tor代理 。 甚至一个酒店预订系统

Pis盖在桌子上。 他们溅到地板上。 饭盒中安装的Raspberry Pi计算模块载板在架子上乱扔。

…或者也许就是我?

我敢打赌,如果您有一个Raspberry Pi,但是至少有两个,而天哪,它们看起来都一样。

这是我最近在测试在一个Raspberry Pi上设置的网络文件系统(NFS)服务器时发现的情况。 我需要插入USB硬盘驱动器,但是…哪一个? Ol'Lingonberry Pi是选定的主机,我被SSH接到了她,但是她是哪一个实际的物理 RPi? 没有办法知道...

还是在那里?

Raspberry Pis stacked up in cluster cases

如此多的Raspberry Pi。 越橘是哪个? (克里斯·柯林斯(Chris Collins), CC BY-SA 4.0

在上一份工作中,我有时会在数据中心的服务器上工作,其中一些服务器具有简洁的功能:服务器正面的ID按钮,按下该按钮时,服务器正面和背面的LED闪烁。 如果需要处理服务器的另一侧,则可以按ID按钮,然后沿着所有方式走到机架的另一侧,然后轻松找到合适的服务器。

Pis上没有任何按钮,但是有LED,经过Google的快速搜索后,我知道其中之一是可控的提示狂笑。

要知道三个重要的方面。 首先,LED路径:在Raspberry Pis上,至少运行Ubuntu 20.04的那些LED,在/sys/class/leds/led0可以找到前端(和用户可控制)的LED。 如果导航到该目录,则会发现它是指向其中包含许多文件的目录的符号链接。 两个重要文件是triggerbrightness

trigger文件控制什么使LED点亮。 如果你cat这个文件,你会发现一个列表:

none usb-gadget usb-host rc-feedback rfkill-any 
rfkill-none kbd-scrolllock kbd-numlock kbd-capslock 
kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock 
kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock
kbd-ctrlrlock timer oneshot disk-activity disk-read
disk-write ide-disk mtd nand-disk heartbeat backlight
gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic
mmc1 [mmc0] bluetooth-power rfkill0 
unimac-mdio--19:01:link unimac-mdio--19:01:1Gbps 
unimac-mdio--19:01:100Mbps unimac-mdio--19:01:10Mbps

括号中的项目表示触发LED的原因。 在上面的示例中,它是[mmc0] -SD卡插入Raspberry Pi时的磁盘活动。 触发文件不是普通文件。 无需直接编辑,而是通过将触发器之一回显到文件中来更改触发器。

为了识别Lingonberry,我需要暂时禁用[mmc0]触发器,以便使LED能够按希望的方式工作。 在脚本中,我通过在触发器文件中回显“ none”来禁用所有触发器:


   
   
# You must be root to do this
$ echo none > trigger

$ cat trigger
[ none ] usb-gadget usb-host rc-feedback rfkill-any rfkill-none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot disk-activity disk-read disk-write ide-disk mtd nand-disk heartbeat backlight gpio cpu cpu0 cpu1 cpu2 cpu3 default-on input panic mmc1 mmc0 bluetooth-power rfkill0 unimac-mdio-- 19 :01:link unimac-mdio-- 19 :01:1Gbps unimac-mdio-- 19 :01:100Mbps unimac-mdio-- 19 :01:10Mbps

在上面的触发器文件的内容中,您可以看到[none]现在已成为选定的触发器。 现在,LED熄灭并且不闪烁。

接下来是brightness文件。 您可以通过将0或1回显到文件中来控制LED是亮(1)还是灭(0)。 交替设置1和0将使LED闪烁,并且在中间睡眠一秒钟会产生规律的开/关闪烁,这与触发LED的任何活动不同。 这非常适合识别Raspberry Pi。

最后,如果不将触发器文件设置回触发器,它将保持关闭状态。 大多数情况下,这不是您想要的-最好查看磁盘活动。 这意味着您必须确保编写的任何脚本在触发器完成或中断时都会重置触发器。 这需要一个信号陷阱 。 陷阱将捕获SIGINTSIGTERM (或其他)信号,并在退出之前执行一些代码。 这样,如果脚本被中断(例如,如果您按CTRL + C停止它),它仍然可以重置触发器。

有了这些新发现的知识,我就可以很快地敲出一个脚本(根据MIT许可证提供 ),并将其扔到我的Raspberry Pis上:


   
   
#!/bin/bash

set -o errexit
set -o nounset

trap quit INT TERM

COUNT = 0

if ! [ $ ( id -u ) = 0 ] ; then
    echo "Must be run as root."
    exit 1
fi

LED = "/sys/class/leds/led0"

if [ [ ! -d $LED ] ]
then
  echo "Could not find an LED at ${LED} "
  echo "Perhaps try '/sys/class/leds/ACT'?"
  exit 1
fi

function quit ( ) {
  echo mmc0 > " ${LED} /trigger"
}

echo -n "Blinking Raspberry Pi's LED - press CTRL-C to quit"

echo none > " ${LED} /trigger"

while true
do
  let "COUNT=COUNT+1"
  if [ [ $COUNT -lt 30 ] ]
  then
    echo 1 > " ${LED} /brightness"
    sleep 1
    echo 0 > " ${LED} /brightness"
    sleep 1
  else
    quit
    break
  fi
done

该脚本检查LED控制目录是否存在,禁用[mmc0]触发器,然后启动一个循环,使LED每秒闪烁一次。 它还包括一个陷阱,用于捕获INTTERM信号并复位触发器。 我将此脚本复制到了我的所有Raspberry Pi上,并且每当需要标识其中一个时,我都运行它。 它可以很好地识别Ol'Lingonberry,因此我可以为NFS服务器设置磁盘,从那时起我已经使用了很多次。

需要注意的一件事-在其他发行版中,通往LED的路径可能有所不同。 /sys/class/leds目录中还有其他LED,但是用户无法控制它们。 它们被连接到Raspberry Pi固件的不同位中。

您有任何酷Raspberry Pi技巧吗? 在评论中让我知道! 我一直很想了解别人对Pis的感染!

翻译自: https://opensource.com/article/20/6/find-raspberry-pi

raspberry pi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值