近日,IRISA(the Research Institute of Computer Science and Random Systems)的一个研究小组开发了一套独特的解决方案来检测恶意软件。该解决方案使用树莓派为主体,借助与之配套的设备来扫描电脑中发出的电磁波,通过分析电磁波即可得知此时是否有恶意活动正在发生。在测试期间,该检测系统的准确率高达 99.82%。
由树莓派所组成的恶意软件检测系统不拦截任何软件,也不调查流入和流出计算机的任何数据包。正如上段所说,树莓派通过分析特定的电磁(EM)波,以极高的精确度探测正在进行的恶意软件活动。为了开发这个恶意软件检测系统,研究人员将 Raspberry Pi 与示波器(Picoscope 6407)和一个 H-field 探头连接起来,以检测电磁波的变化。上述操作只能让树莓派检测电磁,为了让它还能够识别出计算机在受到恶意软件攻击时发出的不同电磁波所传达出来的信息,研究人员对树莓派进行了安全和恶意数据集的训练,从而获得潜在威胁的参数。经过训练的树莓派能够成功地检测到恶意软件正在进行的攻击,准确率更是高达 99.82%。这一整套恶意软件检测系统的最大优势是它是一个外部系统,与一般内置在系统中的检测系统或检测软件完全不同。用户不需要在待扫描的设备上安装任何软件。也因为是外部系统,这个系统对许多恶意软件所具备的反监测手段完全免疫,也不会遭到恶意软件的篡改。虽然这个系统已经具备极高的可用性,但研究人员表示还需要更多的测试来微调该系统。此外,研究人员还需要定期向该系统提供新的恶意软件进行训练,以确保它能够与时俱进,准确地检测到各种类型的攻击,该研究报告完整版在此:https://dl.acm.org/doi/abs/10.1145/3485832.3485894。
苹果开发者大会
树莓派开机启动python程序或gui程序
如果希望在树莓派开机进入界面后,自动启动python的gui程序,以gui.py文件为例:
1、给文件设置运行权限
chmod +x gui.py
2、在这个gui.py文件最开始,加上python编译器的地址
比如 #!/usr/bin/env python
如果不清楚python编译器的地址是什么,可以用 which python命令查看。如果是用python3,则用 which python3
3、打开自启动的文件(以用户为pi为例)
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
最下面增加一行
@/home/pi/Downloads/gui.py
树莓派安装opencv的简易方法
树莓派安装opencv常常会出现很多问题,网上大部分的教程是自行编译,编译有两个问题,1是时间特别长,2是容易出错,特别是头文件目录需要修改,否则很难编译下去。这些对于没有C语言基础的人来说非常困难。这里给出很简单的安装方法:
1、sudo pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
2、 sudo pip3 install -U numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
3、sudo pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
第二步主要是避免版本冲突导致import cv2失败。如安装过程中总是出现“已杀死”而无法安装,则在命令后加上:—no-cache-dir
注:
另一种简单安装方式是
sudo apt-get install libopencv-dev
sudo apt-get install python3-opencv
树莓派系统语言设置成中文
步骤:
1.安装中文字体
sudo apt-get -y install fonts-wqy-zenhei
2.设置显示中文
sudo raspi-config
选择:4 Localisation Options –> I1 Change Locale
操作提示:按空格键在前面打勾或去掉勾(星号=勾),
PageUp 和 PageDown快速翻页,
Tab键跳到OK按钮上
去掉en_GB.UTF-8 UTF-8,
勾上:“en_US.UTF-8 UTF-8”、“zh_CN.UTF-8 UTF-8”、“zh_CN.GBK GBK”(只勾选这三个) >>>>>然后ok
下一屏幕默认语言选 zh_CN.UTF-8>>>>>然后ok

也有人是例外:
重启之后没反应?依然是英文?
在根目录下找到 /etc/profile
修改profile文件,添加以下两行.以便重启之后也能生效:
export LANG=zh_CN.utf8 export LC_ALL=zh_CN.utf8
注意: /etc/profile的修改需要root权限才能修改!
给树莓派增加物理按钮一键开、关机
一直以来,树莓派关机要么直接拔掉电源,要么登陆后执行shutdown命令关机。这两种方式,第一种简单粗暴,但是断电对树莓派的SD伤害非常大。第二种方式比较安全,但是很麻烦。树莓派其实支持物理按键开关机,介绍如下。
一、实现方式
在/boot/config.txt 文件末尾添加一行代码:
dtoverlay=gpio-shutdown
保存,然后重启树莓派,在树莓派的GPIO3(BCM3)和GND引脚之间接一个按键。这时按下按键树莓派就关机了,再按一下按键,树莓派开机。

二、实现的原理
在树莓派的/boot/overlays/文件下,包含了大量的设备树,使得树莓派的内核支持大量的硬件配置,前提是要开启才行。 开启的方式也比较简单,只需要在/boot/config.txt文件中添加或者删除相应的命令即可。树莓派的/boot/config.txt文件相当于电脑的BIOS。 这里只看/boot/overlays/README中和本文相关的内容。
树莓派系统/boot/overlays/README文件中关于关机是这么描述的:
Name: gpio-shutdown
Info: Initiates a shutdown when GPIO pin changes. The given GPIO pin
is configured as an input key that generates KEY_POWER events.
This event is handled by systemd-logind by initiating a
shutdown. Systemd versions older than 225 need an udev rule
enable listening to the input device:
ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*", \
SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", \
ATTRS{keys}=="116", TAG+="power-switch"
This overlay only handles shutdown. After shutdown, the system
can be powered up again by driving GPIO3 low. The default
configuration uses GPIO3 with a pullup, so if you connect a
button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
you get a shutdown and power-up button.
Load: dtoverlay=gpio-shutdown,<param>=<val>
Params: gpio_pin GPIO pin to trigger on (default 3)
active_low When this is 1 (active low), a falling
edge generates a key down event and a
rising edge generates a key up event.
When this is 0 (active high), this is
reversed. The default is 1 (active low).
gpio_pull Desired pull-up/down state (off, down, up)
Default is "up".
Note that the default pin (GPIO3) has an
external pullup.
大概翻译以下:
在/boot/config.txt文件中添加“dtoverlay = gpio-shutdown”时,当GPIO引脚的电平状态发生变化时关闭树莓派,此时给定的GPIO引脚被配置为KEY_POWER事件的输入键,即不断的监控连接到GPIO引脚的按键是否被按下。
树莓派关机后,树莓派系统可以通过将GPIO3驱动为低电平再次开机。 因此如果连接了GPIO3和GND之间的按钮(40引脚接头连接器上的引脚5和6),你就获得了关机和开机按钮。
即添加代码后,树莓派的GPIO3会不断的检测电平状态,如果检测到GPIO3变为低电平(GPIO3连接到GND时),树莓派就会关机,关机后再次将GPIO3变为低电平,则树莓派会开机。 这样在树莓派的GPIO3和GPND之间连接一个按键,就能够实现树莓派的开关机功能。
dtoverlay=gpio-shutdown
注:该功能(开关机)的实现与I2C有部分冲突,要使用GPIO3实现开关机,则必须关闭I2C功能,如不关闭,则只能实现开机功能,而关机功能失效。如需在启用I2C的情况下一键实现开关机,则可以使用gpio_pin=17,即GPIO_0(物理引脚PIN11)做关机键,GPIO3做开机键,简单说就是GPIO3和GPIO17在开关侧并线,两键共地即可。修改如下:sudo nano /boot/config.txt
dtoverlay=gpio-shutdown
dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up

即添加代码后,树莓派的GPIO3会不断的检测电平状态,如果检测到GPIO3变为低电平(GPIO3连接到GND时),树莓派就会关机,关机后再次将GPIO3变为低电平,则树莓派会开机。 这样在树莓派的GPIO3和GPND之间连接一个按键,就能够实现树莓派的开关机功能。 还可以按照以下格式进行自定义配置:
dtoverlay = gpio-shutdown,<param> = <val>
其中的 parm 和 val 的值可以选择的配置有:
gpio_pin 打开触发功能的GPIO引脚(默认3)
active_low 当它为1(低电平有效)时,下降边缘生成按下事
件,并且上升沿会产生按键上升事件。
当它是0(高电平有效)时,
这时和1的状态相反。默认值为1(低电平有效)。
gpio_pull 所需的上拉/下拉状态(关闭,下拉,上拉)
默认为“上拉”。
请注意,默认引脚(GPIO3)具有一个
外部上拉。
Python实现
t = open("/boot/config.txt","a")
line_on = "dtoverlay=gpio-shutdown" # 调用文件的 readline()方法
t.writelines(line_on+'\n')
line_off = "dtoverlay=gpio-shutdown,gpio_pin=17,active_low=1,gpio_pull=up"
t.writelines(line_off+'\n')
t.close()
如何强制树莓派不接显示器启动显示?
树莓派在不接显示器的情况下启动后,如此后再接显示器是没有输出的,这给很多使用者带来不便,如何不接显示器启动又能在需要的时候接上显示器正常显示?由于树莓派并没有传统意义上的BIOS, 所以包括显示等各种系统配置参数通常被存在”config.txt”这个文本文件中,树莓派的config.txt文件会在ARM内核初始化之前被GPU读取。这个文件存在引导分区上,对于Linux,路径通常是/boot/config.txt。如果是Windows (或者OS X) 它会被识别为SD卡中可访问部分的一个普通文件。将树莓派SD卡通过读卡器接到电脑上,就可以修改这个文件实现强制显示器输出,按下述方式修改即可。
sudo nano /boot/config.txt
将 #hdmi_force_hotplug=1前的注释去掉
hdmi_force_hotplug=1 # 伪装成HDMI热插拔信号被检测到, 出现HDMI显示器被接入
hdmi_group=1
hdmi_mode=16
这样就能正常显示了。
如何让树莓派屏幕保持常亮
sudo nano /etc/lightdm/lightdm.conf
找到[SeatDefaults]段下的’xserver-command’,取消注释,修改为如下:
#xserver-command=X 将这一行修改为
xserver-command=X -s 0 -dpms
-s # –设置屏幕保护不启用
dpms #关闭电源节能管理
重启即可
sudo reboot
小度小度、小爱同学、天猫精灵的安全私有开源替代品
Mycroft为您的语音助理应用程序带来了更多的隐私、安全性和自由。
我在农村长大,我们不是很富裕,尽管作为一个偏僻地方的孩子,但我并不真正意识到我们的社会经济地位。我知道这个米色盒子叫一台电脑,放在我爸爸的办公室里。爸爸在银行工作,对于他的工作来说,拥有一台电脑对他来说至关重要。因此,虽然我们从未拥有最新的游戏机,但我们总是有一台电脑。
也许正因为如此,我与所有计算机都建立了相当密切的关系。今天,我很幸运能为重要的计算机公司工作,但那完全是另一回事。我在80年代长大,在90年代中期度过了青少年时代,我对计算机是如何变化的有生动的认识。我记得我爸爸第一次在网上登录我们的9600波特率调制解调器。我记得我第一次能够在我最喜欢的游戏《模拟人生2000》中下载建筑物的皮肤。
我提到这一切是有原因的:我一生都在看着计算机不断发展,从将神秘命令混合到DOS(具有讽刺意味的是,有人说,几年后,我在计算机公司中的角色中仍然执行相同的任务),到“胖”应用程序的GUI,再到网络应用程序和移动应用程序。一个突出的共同点是最终用户对不断简化的界面的需求,以便与技术交互。
从触摸到声音
几年来,很酷的事情是能够触动设备的屏幕并做出反应。触摸屏风靡一时。如今,消费者空间正呈数字助理的趋势。一些统计数据显示,到2022年,55%的美国家庭将拥有语音助理。其他消息人士表示,亚马逊每季度销售约1400万台此类设备,而谷歌落后于约1100万台。如果您想要一个具体的市场价值,MarketWatch估计,到2023年,该行业的价值将为78亿美元。这甚至没有考虑到每个人口袋里的手机!无论您使用什么指标,有一点是明确的:语音助理变得越来越重要。
那么,您唯一的选择是谷歌、亚马逊还是苹果?不!如果他们是的话,我不会写这篇文章,我会在那里把你介绍给Mycroft。
Mycroft:面向开发人员的开源语音助理
对我来说,Mycroft最大的销售特点是它是开源的。这意味着我可以进入,修补,并为该项目做出贡献。它主要基于Python,这对我来说还不错。
在我进一步之前,我想提请您注意副标题:“适用于开发人员”。这些是我的话,虽然我为这个项目做出了贡献,但我不代表它。然而,我想强调的是,该项目尚未处于准备获得大规模采用的状态。Mycroft的官方文件通常非常好,但有些粗糙的地方一直在被改进。因此,如果您愿意付出一些努力,也许会归档一些错误,并从长远来看,这个项目绝对值得您花时间。如果您正在寻找一个现成的、准备去的项目,您可能需要一年左右回来。
以下是参与Mycroft项目的一些主要原因。
隐私
正如我提到的,语音助理无处不在,而且只会增加。虽然他们经常被遗忘,但他们正在倾听一切。苹果、谷歌和亚马逊都在收听他们的语音助手录制的录音。在某些情况下,这些录音甚至在法院使用。
如果你在家庭办公室工作(甚至在世界被新冠病毒颠覆之前)怎么办?您如何保护用户和客户的隐私,特别是当大多数人甚至没有意识到旨在让他们的生活更轻松的技术正在捕捉他们的私人对话时?
即使您不担心暴露您的对话,您也同意公司收集这些数据进行有针对性的广告吗?Mycroft将隐私放在首位。其默认语音转文本(STT)后端是谷歌的STT服务,但您可以从各种各样的提供商中进行选择,包括谷歌、IBM的Watson、Mozilla、Kaldi、微软的Azure等。此外,Mycroft代理通过其服务器为特定提供商(谷歌就是其中之一)的所有STT请求。
安全
还记得我说Mycroft是给开发人员的吗?由于您是Mycroft的主机,这意味着它的安全性是您可以做到的。您可以(也应该)实现VLAN、路由规则、防火墙规则以及与您的环境相关的任何其他安全性。
即使您的安全性不是一流的,您因拥有如此微小的足迹而获得的混淆意味着,除了随机机会或定向攻击外,您的Mycroft实例对外部世界相对安全。如果它在您的网络上,您可以控制什么以及谁可以访问您的语音助理。这是件好事。
我提到Python了吗?
我喜欢Python。这是我能够如此迅速地参与进来的主要原因之一。我在日常工作中广泛使用Python,既是为了乐趣,也是为了盈利。我把我的妻子介绍给Mycroft,她立即开始在我的积压中添加任务,以处理她希望她的语音助理能够做的所有事情。
当我努力处理积压时,我注意到Mycroft的意图解析器之一(我将在我的下一篇文章中讨论)没有正确处理撇号。因此,以真正的开源方式,我分叉了代码,修复了代码,并根据项目创建了拉取请求(PR)。经过一些小的来回,我的公关达到了项目标准,瞧!Mycroft现在处理撇号更好。那有多酷?
A)我能够叉开代码,修复它,并在本地运行修复程序,然后
B)项目接受这些更改以惠及每个人
这太令人惊叹了。
不仅如此,包括KDE Plasma on TV在内的其他项目也集成了Mycroft,使其项目更具吸引力。我很想听到更多利用Mycroft的项目,所以如果您知道有任何项目,请联系Twitter或在下面留下评论。
科学非小说
小时候,我一直喜欢科幻小说;事实上,我仍然喜欢。我想像Jean-Luc Picard一样说:“Computer, Earl Grey. Hot,”让事情神奇地发生。虽然食物复制商还有很长的路要走,但有了Mycroft和一点诀窍,但我可以说:“嘿,Mycroft,启动茶壶”或“嘿,Mycroft,把面包添加到我的购物清单中”,Mycroft会这样做的。
我对Mycroft开发人员社区相对较新,但我们是一小群关系密切的人,他们希望生活在一个Alexas、Siris和Googles开源竞争对手的世界里。顺便在Mattermost上和我们聊天。
使用树莓派投射安卓设备
使用Scrpy将您的手机屏幕转换为与树莓派或任何其他基于Linux的设备上的应用程序一起运行的应用程序。
很难远离我们每天使用的小玩意儿。在现代生活的喧嚣中,我想确保我不会错过手机屏幕上弹出的朋友和家人的重要通知。我也很忙,不想迷失在分心中,拿起电话回复消息往往会分散注意力。
使事情进一步复杂化的是,有很多设备。幸运的是,他们中的大多数人,从强大的工作站到笔记本电脑,甚至卑微的树莓派,都可以运行Linux。因为他们运行Linux,我为一台设备找到的几乎每个解决方案都非常适合其他设备。
一刀切
我想在我凝视的任何屏幕上都能统一我生活中的不同数据来源。
我决定通过将手机屏幕复制到电脑上来解决这个问题。本质上,我把我的手机变成了一个与所有其他应用程序一起运行的应用程序。这有助于我将注意力集中在桌面上,防止我在精神上徘徊,并让我更容易回复紧急通知。
听起来很吸引人吗?这也是你做这件事的方法。
设置Scrpy
Scrcpy,通常称为屏幕复制,是一个开源的屏幕镜像工具,用于从Linux、Windows或macOS显示和控制Android设备。Android设备和计算机之间的通信主要通过USB连接和Android调试桥(ADB)进行。它使用TCP/IP,不需要任何根访问。
Scrcpy的设置和配置非常简单。如果您正在运行Fedora,您可以从Copr存储库安装它:
$ sudo dnf copr enable zeno/scrcpy
$ sudo dnf install scrcpy -y
在Debian或Ubuntu上:
$ sudo apt install scrcpy
您还可以自己编译scrcpy。使用scrcpy的GitHub页面上的说明,即使在树莓派上也可以构建很长时间。
在树莓派上:
先安装snap
$ sudo apt install snaps
scrcpy目前树莓派上没有正式版,安装beta版
$ sudo snap install --beta scrcpy
设置手机
安装scrcpy后,您必须启用USB调试,并将每台设备(树莓派、笔记本电脑或工作站)授权为受信任的控制器。
打开安卓设备上的“设置”应用程序,然后向下滚动到开发人员选项。如果开发人员选项未激活,请按照Android的说明解锁它。
接下来,启用USB调试。

然后通过USB将手机连接到树莓派或笔记本电脑(或您正在使用的任何设备),并将模式设置为PTP(如果可以的话)。如果您的手机不使用PTP,请设置手机用于传输文件的模式(例如,而不是用作连接或MIDI设备)。
您的手机可能会提示您授权您的计算机,并通过其RSA指纹进行识别。您只需要在第一次连接时这样做;之后,您的手机将识别并信任您的计算机。
使用lsusb命令确认设置:
$ lsusb Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 011 Device 004: ID 046d:c21d Logitech, Inc. F310 Gamepad Bus 005 Device 005: ID 0951:1666 Kingston Technology DataTraveler G4 Bus 005 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 004 Device 001: ID 18d1:4ee6 Google Inc. Nexus/Pixel Device (PTP + debug) Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
然后执行$ scrcpy,使用默认设置启动它。

性能和响应能力因您使用什么设备来控制手机而异。在Pi上,一些动画可能很慢,甚至响应有时也会滞后。Scrcpy为此提供了一个简单的修复方法:降低图像scrcpy显示器的比特率和分辨率使您的计算机更容易跟上。使用以下操作:
$ scrcpy --bit-rate 1M --max-size 800
尝试不同的价值观来找到你喜欢的。为了更容易键入,一旦您确定了命令,请考虑创建自己的Bash别名。
切断电源线
scrcpy运行后,您甚至可以通过WiFi连接手机和计算机。scrcpy安装过程还安装adb,这是一个与Android设备通信的命令。Scrcpy还使用此命令与您的设备通信,adb可以通过TCP/IP进行连接。

要尝试,请确保您的手机通过WiFi连接到计算机正在使用的同一无线网络上。暂时不要断开手机与USB的连接!
接下来,通过导航到“设置”并选择“关于手机”来获取手机的IP地址。查看“状态”选项以获取您的地址。它通常以192.168或10开头。
或者,您可以使用adb获取手机的IP地址:
$ adb shell ip route | awk '{print $9}'
To connect to your device over WiFi, you must enable TCP/IP connections. This, you must do through the adb command:
$ adb tcpip 5555
Now you can disconnect your mobile from USB.
Whenever you want to connect over WiFi, first connect to the mobile with the command adb connect. For instance, assuming my mobile's IP address is 10.1.1.22, the command is:
$ adb connect 10.1.1.22:5555
一旦连接好,您可以像往常一样运行scrcpy。
遥控器
Scrcpy易于使用。您可以在终端或GUI应用程序中尝试。
您是否使用其他屏幕镜像应用程序?如果是这样,请在评论中告诉我们。