跳转至

Linux 常用定制

VNC 投屏

VNC(Virtual Network Computing)是一种基于远程帧缓冲协议(RFB)的图形桌面共享系统,它允许用户通过网络连接到远程计算机,对远程计算机进行操控。

从官网中下载 VNC Viewer

Vncserver

Vncserver 的作用是创建一个新的虚拟桌面会话,而不是共享当前的HDMI显示,共享HDMI显示请参考下文使用 x11vnc:

板卡开启VNC服务,并配置密码
kickpi@kickpi:~$ vncserver

You will require a password to access your desktops.

Password: //输入连接密码
Verify:   //再次输入连接密码
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is kickpi:1

Creating default startup script /home/kickpi/.vnc/xstartup
Starting applications specified in /home/kickpi/.vnc/xstartup
Log file is /home/kickpi/.vnc/kickpi:1.log

kickpi@kickpi:~$ ^C

修改VNC配置:

vim /home/kickpi/.vnc/xstartup

注释所有内容并添加内容:

#!/bin/sh
#xrdb "$HOME/.Xresources"
#xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
#export XKL_XMODMAP_DISABLE=1
#/etc/X11/Xsession
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

重启VNC服务:

kickpi@kickpi:~$ vncserver -kill :1
Killing Xtightvnc process ID 3843
kickpi@kickpi:~$ vncserver -geometry 1920x1080

New 'X' desktop is kickpi:1

Starting applications specified in /home/kickpi/.vnc/xstartup
Log file is /home/kickpi/.vnc/kickpi:1.log

kickpi@kickpi:~$

打开RealVNC Viewer,输入ip端口号和密码:

image-20250317142654795

x11vnc

x11vnc可以将当前正在运行的X桌面会话(即HDMI上显示的会话)通过 VNC 共享:

# 安装 x11vnc
sudo apt update
sudo apt install x11vnc
开启服务
x11vnc
启动完成后打印信息
The VNC desktop is:      kickpi:0
PORT=5900

******************************************************************************
Have you tried the x11vnc '-ncache' VNC client-side pixel caching feature yet?

The scheme stores pixel data offscreen on the VNC viewer side for faster
retrieval.  It should work with any VNC viewer.  Try it by running:

    x11vnc -ncache 10 ...

One can also add -ncache_cr for smooth 'copyrect' window motion.
More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching

端口使用5900进行连接:

image-20251119200314265

按键修改

USER_Key 默认功能取消

Linux桌面版

Note

Linux桌面版中USER_key默认功能为打开LoginOut界面,从设置中取消默认功能即可。

UB_key

Linux服务器版

Note

Linux服务器版本中USER_Button默认功能为关机,取消关机功能参考下文。

1. 修改systemd登录器配置

sudo nano /etc/systemd/logind.conf

2. 取消注释并修改以下行

HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore

3. 重启服务

sudo systemctl restart systemd-logind

应用使用

取消USER_Button默认功能后,应用能够正常获取按键的上报事件,根据需求实现功能。

kickpi@kickpi:~$ hexdump /dev/input/event1
0000000 6ba5 691e 0000 0000 15d7 0003 0000 0000
0000010 0001 0074 0001 0000 6ba5 691e 0000 0000
0000020 15d7 0003 0000 0000 0000 0000 0000 0000
0000030 6ba5 691e 0000 0000 62c7 0005 0000 0000
0000040 0001 0074 0000 0000 6ba5 691e 0000 0000
0000050 62c7 0005 0000 0000 0000 0000 0000 0000
0000060 6ba6 691e 0000 0000 a413 000b 0000 0000
0000070 0001 0074 0001 0000 6ba6 691e 0000 0000
0000080 a413 000b 0000 0000 0000 0000 0000 0000
0000090 6ba6 691e 0000 0000 f502 000d 0000 0000
00000a0 0001 0074 0000 0000 6ba6 691e 0000 0000
00000b0 f502 000d 0000 0000 0000 0000 0000 0000

系统拷贝

eMMC 系统拷贝至新 SD 卡

工具准备

  • 硬件:SD卡(写入速度 ≥ class10,SD卡性能会影响系统备份时间)

操作步骤

1. 将 SD 卡插入卡槽:

kickpi@kickpi:~$ lsblk   //查看块设备
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0      179:0    0  7.2G  0 disk
└─mmcblk0p1  179:1    0  7.1G  0 part /mnt/emmc/mmcblk0p1
                                      /var/log.hdd
                                      /
mmcblk0boot0 179:16   0    4M  1 disk
mmcblk0boot1 179:32   0    4M  1 disk
mmcblk1      179:48   0 58.6G  0 disk                   //mmcblk1为SD卡
└─mmcblk1p1  179:49   0   58G  0 part /mnt/sd/mmcblk1p1  //分区已经挂载的话需要先卸载
zram0        254:0    0  981M  0 disk [SWAP]
zram1        254:1    0   50M  0 disk /var/log
kickpi@kickpi:~$

2. 格式化 SD 卡:

kickpi@kickpi:~$ sudo umount /dev/mmcblk1p1  //卸载挂载的分区
[sudo] password for kickpi:
kickpi@kickpi:~$ sudo mkfs.ext4 /dev/mmcblk1 //格式化SD卡
mke2fs 1.46.5 (30-Dec-2021)
Found a dos partition table in /dev/mmcblk1
Proceed anyway? (y,N) y                      //y确认
Creating filesystem with 15360000 4k blocks and 3842048 inodes
Filesystem UUID: 0357bd31-32bf-45ee-b989-6fa1a1781605
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done

kickpi@kickpi:~$

3. 使用dd if命令或nand-sata-install命令将系统拷贝至SD卡中。

dd if

Tip

拷贝过程中请耐心等待,根据SD卡性能大约需要10~25分钟拷贝完成。

kickpi@kickpi:~$ dd if=/dev/mmcblk0  of=/dev/mmcblk1  bs=4M
1850+0 records in
1850+0 records out
7759462400 bytes (7.8 GB, 7.2 GiB) copied, 190.241 s, 40.8 MB/s
kickpi@kickpi:~$

nand-sata-install

sudo nand-sata-install 2 1

Tip

示意图中/dev/mmcblk1p1,说明系统从 eMMC 拷贝至 SD 卡中。

image-20251114141055576

拷贝eMMC系统生成系统镜像

工具准备

  • 硬件:U 盘(容量 ≥ 32 G,U盘性能会影响系统备份时间)

操作步骤

1. U盘挂载:

mkdir /mnt/sda
mount /dev/sda1 /mnt/sda

2. 拷贝生成系统镜像

dd if=/dev/mmcblk0  of=/mnt/sda/output.img  bs=4M status=progress
sync /mnt/sda/

3. 拷贝生成的镜像大小约在30G左右。生成的 output.img 可用于烧录。

系统登录

系统默认 Kickpi 用户自动登录,可通过修改相关配置文件取消自动登录或实现其他用户登陆。

串口登录修改

/lib/systemd/system/serial-getty@.service.d/override.conf目录下文件进行修改:

kickpi@kickpi:~$ cat /lib/systemd/system/serial-getty@.service.d/override.conf
[Service]
ExecStartPre=/bin/sh -c 'exec /bin/sleep 10'
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin kickpi %I $TERM //去除自动登录删除 --autologin 字段,修改登录用户则修改 kickpi 即可
Type=idle
kickpi@kickpi:~$

桌面登录修改

系统默认自动登录,取消自动登录请删除配置文件或重命名配置文件:

mv /etc/lightdm/lightdm.conf.d/22-autologin.conf /etc/lightdm/lightdm.conf.d/22-autologin.conf-bak

修改自动登录用户

1. 修改/etc/lightdm/lightdm.conf.d/22-autologin.conf

[Seat:*]
autologin-user=root  //修改登录用户名
autologin-user-timeout=0
user-session=xfce

2. 修改/etc/lightdm/users.conf

[UserList]
minimum-uid=0 # 允许UID=0(即root)登录
hidden-users=nobody nobody4 noaccess
hidden-shells=/bin/false /usr/sbin/nologin /sbin/nologin

无桌面终端登录

修改/usr/lib/systemd/system/getty@.service.d/override.conf

[Service]
ExecStartPre=/bin/sh -c 'exec /bin/sleep 10'
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin root %I $TERM ////去除自动登录则删除 --autologin 字段,修改登录用户则修改 kickpi 即可
Type=idle

网络配置

Note

网络优先级:
有线网口使用局域网时,WiFi连接网络无法访问外网。

静态IP配置

根据自己的网关和网段进行配置,否则无法访问网络

vim /etc/network/interfaces
// 添加以下内容

auto eth0
iface eth0 inet static
address 192.168.1.100   //IP地址
netmask 255.255.255.0   //子网掩码
gateway 192.168.1.1     //网关

设置wifi热点(AP)模式

安装 create_ap

git clone https://github.com/lakinduakash/linux-wifi-hotspot
cd linux-wifi-hotspot/src/scripts
sudo make install

# 安装依赖
sudo apt install hostapd dnsmasq

一键创建 AP

# 基本用法:create_ap wlan0 eth0 SSID 密码
sudo create_ap wlan0 eth0 MyHotspot MyPassword123

# 后台运行
sudo create_ap --daemon wlan0 eth0 MyHotspot MyPassword123

创建5G AP

修改区域
sudo iw reg set US
选择36信道
sudo create_ap -c 36 -daemon wlan0 eth0 MyHotspot MyPassword123

语言切换

1. Linux 系统中配置中文语言环境:

sudo apt update
sudo apt install language-pack-zh-hans language-pack-zh-hant
sudo dpkg-reconfigure locales

2. 弹出的窗口中使用Space选中zh_CN.UTF-8 UTF-8Enter确认:

image-20251114165923942

3. 继续选择zh_CN.UTF-8Enter 确认:

image-20251114165941950

4. 等待初始化完成,更新系统默认语言为中文,重启系统

sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8

GPU/VPU 验证

Note

搭载 H618平台的开发板,在Ubuntu系统下,不支持GPU硬件加速 和 VPU硬件编解码。

GPU

# 检查DRM显卡设备
ls /dev/dri/

# 检查GPU驱动模块
lsmod | grep -E "mali|panfrost|pvr|powervr"

# 检查GPU内核日志
dmesg | grep -iE "gpu|mali|panfrost|pvr"

VPU

# 检查设备节点
ls -la /dev/video* 2>/dev/null

# 检查内核驱动
lsmod | grep -E "cedrus|sunxi_cedrus"

# 检查内核日志
dmesg | grep -iE "cedrus|v4l2.*video|allwinner.*video"

K2B/K2C H618 Armbian GPU/VPU 测试

GPU

GLmark2 性能测试(连接 HDMI-1080P 显示器)

# 安装 GLmark2 工具
sudo apt install glmark2 glmark2-es2 -y

kickpi@kickpi-k2b-v2:~$ glmark2-es2
=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      Mesa
    GL_RENDERER:    Mali-G31 (Panfrost)
    GL_VERSION:     OpenGL ES 3.1 Mesa 25.2.8-0ubuntu0.24.04.1
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
    Surface Size:   800x600 windowed
=======================================================

...

=======================================================
                                  glmark2 Score: 216
=======================================================

GLmark2 性能测试(串口终端测试)

# 安装 GLmark2 工具
sudo apt install glmark2-es2-drm -y

kickpi@kickpi-k2b-v2:~$ glmark2-es2-drm
Warning: DRM_CAP_ASYNC_PAGE_FLIP not supported, falling back to 'mailbox' mode for SwapInterval(0).
=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      Mesa
    GL_RENDERER:    Mali-G31 (Panfrost)
    GL_VERSION:     OpenGL ES 3.1 Mesa 25.2.8-0ubuntu0.24.04.1
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
    Surface Size:   1920x1080 fullscreen
=======================================================
[build] use-vbo=false:Error: Failed to become DRM master (hint: glmark2-drm needs to be run in a VT)
 FPS: 278 FrameTime: 3.598 ms
=======================================================
                                  glmark2 Score: 277
=======================================================

测试结果:外接显示屏可查看GPU渲染图形(得分约216),调试串口可查看GPU渲染日志(得分约277)


VPU

# 安装GStreamer
sudo apt install -y gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad ffmpeg

ffmpeg -decoders 2>/dev/null | grep -E "v4l2|cedrus"

# 生成原始 YUV 源
ffmpeg -f lavfi -i testsrc=duration=5:size=1920x1080:rate=30 \
    -pix_fmt yuv420p -f rawvideo temp.yuv -y

H.264 硬件解码测试

# 编码 H.264 (2Mbps CBR)
ffmpeg -s 1920x1080 -r 30 -pix_fmt yuv420p -i temp.yuv \
    -c:v libx264 -b:v 2M -maxrate 2M -bufsize 4M \
    -preset medium -x264-params "nal-hrd=cbr" test_h264.mkv -y


# 使用 GStreamer 强制 VPU 硬解
time gst-launch-1.0 filesrc location=test_h264.mkv \
    ! matroskademux ! h264parse ! v4l2slh264dec ! fakesink -t

Execution ended after 0:00:04.852539138

real    0m5.170s
user    0m4.379s
sys     0m0.160s

H.265 硬件解码测试

# 编码 H.265 (2Mbps CBR)
ffmpeg -s 1920x1080 -r 30 -pix_fmt yuv420p -i temp.yuv \
    -c:v libx265 -b:v 2M -maxrate 2M -bufsize 4M \
    -preset medium -x265-params "hrd=1" test_h265.mkv -y

# 使用 GStreamer 强制 VPU 硬解
time gst-launch-1.0 filesrc location=test_h265.mkv \
    ! matroskademux ! h265parse ! v4l2slh265dec ! fakesink -t

Execution ended after 0:00:04.438429614

real    0m4.684s
user    0m4.528s
sys     0m0.113s

测试结果:目前系统默认的软件版本无法支持FFmpeg硬件编解码;GStreamer 硬解码测试可行

解码 H.264 1920x1080 150帧测试 fps 30.9

解码 H.265 1920x1080 150帧测试 fps 33.8