1、安装桌面
sudo apt install ubuntu-desktop
sudo apt install xubuntu-desktop
sudo apt install lubuntu-desktop
sudo apt install ubuntu-mate-desktop
树莓派ubuntu mate系统设置开机自动登陆
sudo nano /etc/lightdm/lightdm.conf
[Seat:*]
autologin-guest=false
autologin-user=chengyangkj
autologin-user-timeout=0
2、raspi-config
安装依赖
sudo apt install whiptail parted lua5.1 alsa-utils psmisc
从Raspberrypi官网下载最新的deb安装包
wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20200707_all.deb
安装Deb安装包
sudo dpkg -i raspi-config_20200707_all.deb
装好软件还是提示缺少依赖执行错误
sudo apt install -f -y
运行raspi-config,需要sudo或以上权限
sudo raspi-config
3、系统配置
3.1、I2C配置
安装
sudo apt-get install i2c-tools python-smbus
添加当前用户到I2C组
sudo adduser pi i2c
修改配置文件
sudo vi /etc/modprobe.d/raspi-blacklist.conf
sudo vi /etc/modules
测试I2C功能
# 树莓派A型
sudo i2cdetect -y 0
# 树莓派B型
sudo i2cdetect -y 1
3.2、SSH配置
安装SSH
sudo apt install openssh-server sshguard
查看ssh服务是否启动:
sudo ps -e |grep ssh
启动ssh服务:
sudo service ssh start
3.3、wifi配置
编辑文件:
sudo vim /etc/netplan/80-cloud-init.yaml
- 打开树莓派通讯协议
sudo raspi-config
- 扫描通讯
i2cdetect -y -r 1
编辑文件内容:
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: yes
dhcp6: no
access-points:
"Yahboom1_5G":
password: "yahboom890729"
sudo netplan apply
3.4、AP模式
- 将github上面的wifi热点开源项目安装到本地
sudo git clone https://github.com/oblique/create_ap
cd create_ap
sudo make install
- 安装依赖库
sudo apt-get install util-linux procps hostapd iproute2 iw haveged dnsmasq
- 输入ifconfig显示网络接口,创建WiFi热点
sudo create_ap wlan0 网卡 wifi名 密码
执行完成之后,检查是否wifi创建成功
- 开机自动启动热点
vim /etc/rc.local
sudo create_ap wlan0 网卡 wifi名 密码 &
修改完成之后,即可sudo reboot
重启电脑,默认的ip地址是192.168.12.1
4、关机、重启、密码
- 关机
sudo shutdown -h now
sudo halt
sudo poweroff
sudo init 0
- 重启
sudo reboot
shutdown -r now
- 设置密码
sudo passwd root
sudo passwd 用户名
5、修改主机名与用户名
5.1、修改用户名
修改用户名之前注意:修改root密码、usrname密码、jupyter lab密码、vnc密码、seahourse。
先转为root用户
sudo su
创建新用户aa
-r:建立系统账号
-m:自动建立用户的登入目录
-s:指定用户登入后所使用的shell
sudo useradd -rms /bin/bash aa
添加啊aa的权限
sudo vim /etc/sudoers
设置密码
sudo passwd aa
切换到新建用户aa下修改,旧的用户名oldname 修改为新用户名newname
usermod -l newname oldname
sudo mv -i oldname newname
sudo vim /etc/shadow
sudo vim /etc/group
sudo vim /etc/passwd
注意
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
第一个ubuntu,用户名。
Ubuntu,登录界面显示的用户名。
/home/ubuntu:ubuntu用户名挂载的目录。
以防万一,重新设置修改后用户密码,注销当前用户aa,切换修改后的用户,
删除用户:userdel 同时删除用户和目录
sudo userdel -r username
注意:修改的时候要格外小心,不要打错一个字母。
5.2、修改主机名
修改/etc/hostname中存放的是主机名,hostname文件的一个例子:
sudo vim /etc/hostname
5.3、修改用户名无法登录
提示:如果你要修改密码和用户名的话,请先修改密码,重启后,再修改用户名,重启。如果你先修改用户名,再修改密码的话,可能会导致你登录不了Ubuntu。
先修改用户名再修改密码导致登录不了Ubuntu
解决方法:进入recovery-mode修改登录信息
1)重启系统,进入开机画面时,选择第二项,确定,如下图
选择recovery-mode启动
此时选择root登录如下
各行说明如下:
选择root身份进入
- 以root身份进入系统,此时许多文件无法写入,需要执行如下命令
mount -o rw,remount /
- 修改用户名等信息
usermod -l newName oldName
注:修改用户名后需要手动改/home下的家目录名称为你的用户名
- reboot
6、增加交换空间
创建文件
sudo mkdir /opt/image
cd /opt/image
sudo touch swap
添加交换文件并设置为1G,过段时间会返回(这个略慢)
sudo dd if=/dev/zero of=/opt/image/swap bs=1024 count=1024000
#1024000+0 records in
#1024000+0 records out
#大小 copied, 所用时间 s, 速度 MB/s
设置交换空间
sudo mkswap /opt/image/swap
启用新增的交换空间
sudo swapon /opt/image/swap
确认是否已经生效
free -m
之后修改/etc/fstab文件使重启后这块swap也能生效,在文件最后添加
sudo vim /etc/fstab
/opt/image/swap /swap swap defaults 0 0
7、Jetson Nano 风扇
7.1、PWM散热风扇
输入以下指令打开风扇: 可以调节中间的数值来进行风扇的调速,修改的范围是0-255
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
输入以下指令关闭风扇:
sudo sh -c 'echo 0 > /sys/devices/pwm-fan/target_pwm'
7.2、开机自动启动风扇
sudo pip3 install jetson-stats
sudo jtop
按下按键5进入风扇控制界面
按下按键s和e设置jetson_clocks Running和boot Enable
根据自己需求,通过按键m(减速)和p(加速)控制风扇风速(0%-100%)
我这里设置风速为50%,此时风扇开始启动,在右下角可以看到风扇运行的占空比
按键q退出软件。
7.3、开机启动风扇脚本
cd .config
mkdir autostart
将start.desktop复制到 .config/autostart
cd ~/RGB_Cooling_HAT
python RGB_Cooling_HAT.py
8、问题收集
8.1、login keyring
打开chrome弹出“Enter password to unlock your login keyring”解决方法
seahorse
# 查找
find ~/ -name login.keyring
rm -f ~/.gnome2/keyrings/login.keyring
sudo rm -f ~/.local/share/keyrings/login.keyring
再次打开谷歌,出现了choose password for new keying !!!
8.2、python setup.py
出现Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build*解决办法
easy_install -U setuptools
sudo pip install jupyter
8.3、Illegal instruction
Jetson Nano问题解决“Illegal instruction(core dumped)”
sudo vim ~/.bashrc
export OPENBLAS_CORETYPE=ARMV8
sudo apt-get install build-essential python3 python3-dev python3-pip python3-pandas python3-opencv python3-h5py libhdf5-serial-dev hdf5-tools nano ntp
8.4、触摸屏失效
sudo apt remove --purge libfwupd2 fwupd fwupd-signed
sudo apt install gnome-software* gnome-software-plugin-snap* ubuntu-software*
8.5、普通用户控制树莓派的GPIO
参考链接
Raspbian上的Rpi.GPIO库是可以在普通用户下控制树莓派的GPIO的,然而在ArchlinuxARM下,却需要root用户才行,这无疑会引起安全问题,好在RPi.GPIO提供了一个获取权限的脚本:create_gpio_user_permissions.py
然而这个脚本是没法在ArchlinuxARM上直接运行的,因为Archlinux缺少adduser命令。
这个脚本是这样的:
import grp
import subprocess
def ensure_gpiogroup():
try:
grp.getgrnam('gpio')
except KeyError:
print('GPIO group does not exist - creating...')
subprocess.call(['groupadd', '-f', '-r', 'gpio'])
subprocess.call(['adduser', 'pi', 'gpio'])
# in future, also for groups:
# spi
# i2c
add_udev_rules()
def add_udev_rules():
with open('/etc/udev/rules.d/99-gpio.rules','w') as f:
f.write("""SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
""")
if __name__ == '__main__':
ensure_gpiogroup()
首先,建一个gpio组:
sudo groupadd -f -r gpio
然后把当前用户(我的用户是yafeng)加入到gpio组
sudo gpasswd -a dofbot gpio
然后建立udev的规则文件:/etc/udev/rules.d/99-gpio.rules
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
然后重启,就可以直接在普通用户下操作GPIO了,经测试,不光Rpi.GPIO库,wiringpi等其他库也可以了
附录:
no attribute ‘fourcc’
3.0 version:
out = cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc(*'XVID'), 20.0, (640,480))
2.4 version:
out = cv2.VideoWriter('output.avi',cv2.cv.CV_FOURCC('M','J','P','G'), 20.0, (640,480))
使用opencv读取和设置摄像头或视频属性代码如下。
cap.set( propId , value )
cap.get( propId )
其中,propId 的值为 0 - 18,19个值并不是每个都可以进行修改,每个值对应的属性以及功能如下如下:
参数 | 值 | 功能/意义 |
---|---|---|
CV_CAP_PROP_POS_MSEC | 0 | 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳 |
CV_CAP_PROP_POS_FRAMES | 1 | 基于0的索引将被解码/捕获下一帧 |
CV_CAP_PROP_POS_AVI_RATIO | 2 | 视频文件相对位置:0 - 电影的开始,电影的1 - 结束 |
CV_CAP_PROP_FRAME_WIDTH | 3 | 视频里每一帧的宽 |
CV_CAP_PROP_FRAME_HEIGHT | 4 | 视频里每一帧的高 |
CV_CAP_PROP_FPS | 5 | 视频的帧速 |
CV_CAP_PROP_FOURCC | 6 | 4个字符表示的视频编码器格式 |
CV_CAP_PROP_FRAME_COUNT | 7 | 视频的帧数 |
CV_CAP_PROP_FORMAT | 8 | byretrieve()返回的Mat对象的格式 |
CV_CAP_PROP_MODE | 9 | 指示当前捕获模式的后端特定值 |
CV_CAP_PROP_BRIGHTNESS | 10 | 图像的亮度(仅适用于相机) |
CV_CAP_PROP_CONTRAST | 11 | 图像对比度(仅适用于相机) |
CV_CAP_PROP_SATURATION | 12 | 图像的饱和度(仅适用于相机) |
CV_CAP_PROP_HUE | 13 | 图像的色相(仅适用于相机) |
CV_CAP_PROP_GAIN | 14 | 图像的增益(仅适用于相机) |
CV_CAP_PROP_EXPOSURE | 15 | 曝光(仅适用于相机) |
CV_CAP_PROP_CONVERT_RGB | 16 | 表示图像是否应转换为RGB的布尔标志 |
CV_CAP_PROP_WHITE_BALANCE | 17 | 目前不支持 |
CV_CAP_PROP_RECTIFICATION | 18 | 立体摄像机的整流标志(注意:只有当前支持DC1394 v 2.x后端) |
Config配置文件说明
如果树莓派的显示超出了屏幕的边界,调整overscan选项可以来修正这种情况。配置项对应的值是需要移动的像素的数量。
overscan_left:该项用来将画面整体向左侧移动一定长度,以像素为单位。
overscan_right:该项用来将画面向显示器右方移动一定长度,单位同上。
overscan_top:该项用来将画面向显示器上方移动一定长度,单位同上。
overscan_bottom:该项用来将画面向显示器下方移动一定长度,单位同上。
disable_overscan:如果你使用HDMI端口连接到显示器或电视上,或许你会发现你的画面四周有黑边存在,为了避免黑边可以通过将该值设为1来把默认overscan选项关闭。
framebuffer_width:该配置项用来调整输出画面的宽度,对应值的单位为像素。如果你的屏幕上的文字太小,可以将该值设成一个比连接到的显示器默认宽度更小的值。
framebuffer_height:该值对终端画面大小的影响类似于 framebuffer_ width,不过是垂直方向的。
framebuffer_depth:控制终端画面的颜色深度,单位为位/像素。默认为16位,可显示65536色。该值还可以设为8位(256色)、24位或32位。
framebuffer_ignore_alpha:当配置项对应值为1时,禁止使用控制透明度的alpha通道。禁止alpha通道不是必须的,但是当framebuffer_depth设为32位/像素时能用来纠正许多图像错误。
sdtv_mode:该值影响树莓派的输出信号,需要根据各国使用的电视制式进行修改。默认情况下,树莓派使用北美的NTSC视频标准,其他国家会有所不同,常见的值有:
0-NTSC,北美视频标准。
1-NTSC-J,日本视频标准。
2-PAL,英国和其他国家视频标准。
3-PAL-M,巴西视频标准。
sdtv_aspect:控制输出画面的宽高比。如果输出的画面比例不正常,可以根据你使用的显示器的宽高比来修改这个值。常见的值有:
1-4:3,一般较旧的电视机使用该比例。
2-14:9,较小的宽屏电视常用该比率。
3-16:9,当前大多数宽屏电视使用该比率。
hdmi_mode:当视频输出使用不同分辨率时,它可以用来覆盖HDMI端口的自动分辨率检测结果。若你的树莓派使用的分辨率比显示器支持的分辨率更低时该配置项非常有用,附录B中给出了所有该项可能的值。
hdmi-drive:可以使用该配置项来改变HDMI端口的电压输出,在你使用HDMI-DVI转接口的时候非常有用,因为HDMI和DVI电压稍有不同。当你注意到看高亮的图像时画面有雪花或者有发散线状,可以试着改动这个配置项。该值可能的数字是:
1-DVI输出电压。该模式下,HDMI输出中不包含音频信号。
2-HDMI输出电压。该模式下,HDMI输出中包含音频信号。
config-hdmi_boost:一些显示器使用HDMI端口连接时,需要较多的电量来运行。如果你的画面上有雪花,试着增加该项的值,增加范围从1(用于短电缆)到7(用于长电缆)。
hdmi_force_hotplug:强制树莓派使用HDMI端口,即使树莓派没有检测到显示器连接仍然使用HDMI端口。该值为0时允许树莓派尝试检测显示器,当该值为1时,强制树莓派使用HDMI。
hdmi_group:设置HMDI组模式为CEA或DMT,在使用hdmi_mode来控制输出方案和频率前,你需要根据你的HDMI端口连接的显示器来设置该值。常见的两个值为:
1-按CEA(美国消费电子协会)指定的标准设置HDMI_group。当树莓派连接到HDTV并且使用附录"HDMI显示模式"中的第一设置列表中模式时使用该值。
2-按DMT旗下的VESA(视频电子标准协会)制定的标准来设置HDMI group。该配置项值一般在当树莓派使用DVI连接到电脑显示器时并且使用附录B"HDMI显示模式"中的第二设置列表时使用。
hdmi_safe:强制树莓派使用预置的HDMI设置来提供最大的兼容性。该处值设为1等价于
hdmi_force_hotplug=1
config_hdmi_boost=4
hdmi_group=1
hdmi_mode=1
disable_overscan=0
CEA分辨率
以下是CEA规定的电视规格分辨率。这些分辨率的hdmi_group=1。
hdmi_mode=1 VGA
hdmi_mode=2 480p 60Hz
hdmi_mode=3 480p 60Hz H
hdmi_mode=4 720p 60Hz
hdmi_mode=5 1080i 60Hz
hdmi_mode=6 480i 60Hz
hdmi_mode=7 480i 60Hz H
hdmi_mode=8 240p 60Hz
hdmi_mode=9 240p 60Hz H
hdmi_mode=10 480i 60Hz 4x
hdmi_mode=11 480i 60Hz 4x H
hdmi_mode=12 240p 60Hz 4x
hdmi_mode=13 240p 60Hz 4x H
hdmi_mode=14 480p 60Hz 2x
hdmi_mode=15 480p 60Hz 2x H
hdmi_mode=16 1080p 60Hz
hdmi_mode=17 576p 50Hz
hdmi_mode=18 576p 50Hz H
hdmi_mode=19 720p 50Hz
hdmi_mode=20 1080i 50Hz
hdmi_mode=21 576i 50Hz
hdmi_mode=22 576i 50Hz H
hdmi_mode=23 288p 50Hz
hdmi_mode=24 288p 50Hz H
hdmi_mode=25 576i 50Hz 4x
hdmi_mode=26 576i 50Hz 4x H
hdmi_mode=27 288p 50Hz 4x
hdmi_mode=28 288p 50Hz 4x H
hdmi_mode=29 576p 50Hz 2x
hdmi_mode=30 576p 50Hz 2x H
hdmi_mode=31 1080p 50Hz
hdmi_mode=32 1080p 24Hz
hdmi_mode=33 1080p 25Hz
hdmi_mode=34 1080p 30Hz
hdmi_mode=35 480p 60Hz 4x
hdmi_mode=36 480p 60Hz 4xH
hdmi_mode=37 576p 50Hz 4x
hdmi_mode=38 576p 50Hz 4x H
hdmi_mode=39 1080i 50Hz reduced blanking
hdmi_mode=40 1080i 100Hz
hdmi_mode=41 720p 100Hz
hdmi_mode=42 576p 100Hz
hdmi_mode=43 576p 100Hz H
hdmi_mode=44 576i 100Hz
hdmi_mode=45 576i 100Hz H
hdmi_mode=46 1080i 120Hz
hdmi_mode=47 720p 120Hz
hdmi_mode=48 480p 120Hz
hdmi_mode=49 480p 120Hz H
hdmi_mode=50 480i 120Hz
hdmi_mode=51 480i 120Hz H
hdmi_mode=52 576p 200Hz
hdmi_mode=53 576p 200Hz H
hdmi_mode=54 576i 200Hz
hdmi_mode=55 576i 200Hz H
hdmi_mode=56 480p 240Hz
hdmi_mode=57 480p 240Hz H
hdmi_mode=58 480i 240Hz
hdmi_mode=59 480i 240Hz H
H means 16:9 variant (of a normally 4:3 mode).
2x means pixel doubled (i.e. higher clock rate, with each pixel repeated twice)
4x means pixel quadrupled (i.e. higher clock rate, with each pixel repeated four times)
DMT分辨率
以下是计算机显示器使用的分辨率。这些分辨率的hdmi_group=2。
hdmi_mode=1 640x350 85Hz
hdmi_mode=2 640x400 85Hz
hdmi_mode=3 720x400 85Hz
hdmi_mode=4 640x480 60Hz
hdmi_mode=5 640x480 72Hz
hdmi_mode=6 640x480 75Hz
hdmi_mode=7 640x480 85Hz
hdmi_mode=8 800x600 56Hz
hdmi_mode=9 800x600 60Hz
hdmi_mode=10 800x600 72Hz
hdmi_mode=11 800x600 75Hz
hdmi_mode=12 800x600 85Hz
hdmi_mode=13 800x600 120Hz
hdmi_mode=14 848x480 60Hz
hdmi_mode=15 1024x768 43Hz DO NOT USE
hdmi_mode=16 1024x768 60Hz
hdmi_mode=17 1024x768 70Hz
hdmi_mode=18 1024x768 75Hz
hdmi_mode=19 1024x768 85Hz
hdmi_mode=20 1024x768 120Hz
hdmi_mode=21 1152x864 75Hz
hdmi_mode=22 1280x768 reduced blanking
hdmi_mode=23 1280x768 60Hz
hdmi_mode=24 1280x768 75Hz
hdmi_mode=25 1280x768 85Hz
hdmi_mode=26 1280x768 120Hz reduced blanking
hdmi_mode=27 1280x800 reduced blanking
hdmi_mode=28 1280x800 60Hz
hdmi_mode=29 1280x800 75Hz
hdmi_mode=30 1280x800 85Hz
hdmi_mode=31 1280x800 120Hz reduced blanking
hdmi_mode=32 1280x960 60Hz
hdmi_mode=33 1280x960 85Hz
hdmi_mode=34 1280x960 120Hz reduced blanking
hdmi_mode=35 1280x1024 60Hz
hdmi_mode=36 1280x1024 75Hz
hdmi_mode=37 1280x1024 85Hz
hdmi_mode=38 1280x1024 120Hz reduced blanking
hdmi_mode=39 1360x768 60Hz
hdmi_mode=40 1360x768 120Hz reduced blanking
hdmi_mode=41 1400x1050 reduced blanking
hdmi_mode=42 1400x1050 60Hz
hdmi_mode=43 1400x1050 75Hz
hdmi_mode=44 1400x1050 85Hz
hdmi_mode=45 1400x1050 120Hz reduced blanking
hdmi_mode=46 1440x900 reduced blanking
hdmi_mode=47 1440x900 60Hz
hdmi_mode=48 1440x900 75Hz
hdmi_mode=49 1440x900 85Hz
hdmi_mode=50 1440x900 120Hz reduced blanking
hdmi_mode=51 1600x1200 60Hz
hdmi_mode=52 1600x1200 65Hz
hdmi_mode=53 1600x1200 70Hz
hdmi_mode=54 1600x1200 75Hz
hdmi_mode=55 1600x1200 85Hz
hdmi_mode=56 1600x1200 120Hz reduced blanking
hdmi_mode=57 1680x1050 reduced blanking
hdmi_mode=58 1680x1050 60Hz
hdmi_mode=59 1680x1050 75Hz
hdmi_mode=60 1680x1050 85Hz
hdmi_mode=61 1680x1050 120Hz reduced blanking
hdmi_mode=62 1792x1344 60Hz
hdmi_mode=63 1792x1344 75Hz
hdmi_mode=64 1792x1344 120Hz reduced blanking
hdmi_mode=65 1856x1392 60Hz
hdmi_mode=66 1856x1392 75Hz
hdmi_mode=67 1856x1392 120Hz reduced blanking
hdmi_mode=68 1920x1200 reduced blanking
hdmi_mode=69 1920x1200 60Hz
hdmi_mode=70 1920x1200 75Hz
hdmi_mode=71 1920x1200 85Hz
hdmi_mode=72 1920x1200 120Hz reduced blanking
hdmi_mode=73 1920x1440 60Hz
hdmi_mode=74 1920x1440 75Hz
hdmi_mode=75 1920x1440 120Hz reduced blanking
hdmi_mode=76 2560x1600 reduced blanking
hdmi_mode=77 2560x1600 60Hz
hdmi_mode=78 2560x1600 75Hz
hdmi_mode=79 2560x1600 85Hz
hdmi_mode=80 2560x1600 120Hz reduced blanking
hdmi_mode=81 1366x768 60Hz
hdmi_mode=82 1080p 60Hz
hdmi_mode=83 1600x900 reduced blanking
hdmi_mode=84 2048x1152 reduced blanking
hdmi_mode=85 720p 60Hz
hdmi_mode=86 1366x768 reduced blanking