飞腾派OS(基于Debian11无桌面版本)打造weston+Qt工控领域环境测试
分享作者:wx17334686262043
作者昵称:CodingPioneer
评测品牌:萤火工场
评测型号:CEK8903-E2KQD4-30
发布时间:2025-04-02 15:28:56
0
前言
GNOME、KDE、XFCE等主流桌面环境不太适合在工控领域应用,这个测试就是实现在飞腾派OS的基础上打造出weston+Qt的轻量级桌面环境。
开源口碑分享内容

以下操作都是在飞腾派中执行,具体测试步骤如下:

0 先更新

```bash

sudo apt update

sudo apt upgrade

```

1 安装xwayland协议及weston桌面

```bash

sudo apt install xwayland weston

```

依赖的软件包:

- libfreerdp2-2

- libweston-10-0

- libwinpr2-2

- freerdp2-x11

2 安装Qt5

2.1 安装qt5组件

```bash

sudo apt install build-essential

```

2.2 安装Qt5基础库和开发工具

```bash

sudo apt install qtbase5-dev qtbase5-dev-tools

```

2.3 安装相关组件

```bash

sudo apt install qtwayland5

sudo apt install libqt5serialport5 libqt5serialport5-dev

sudo apt install qtwebengine5-*

sudo apt install libqt5webengine5

```

3 安装中文字符集和中文字体

3.1 安装中文字符集

检查和设置区域(Locale)

```bash

locale

```

安装中文语言字符集支持

```bash

sudo apt update

sudo apt install locales

sudo dpkg-reconfigure locales

```

> ##blue##

> 在dpkg-reconfigure界面中,选择zh_CN.UTF-8等中文选项,确保它们被选中。

**设置环境变量**

编辑~/.bashrc或者~/.profile文件,添加以下内容:

```bash

export LANG=zh_CN.UTF-8

export LANGUAGE=zh_CN:zh

export LC_ALL=zh_CN.UTF-8

```

保存后,使用以下命令使更改生效:

```bash

source ~/.bashrc

```

3.2 安装中文字体

安装中文字体如下:

```bash

sudo apt update

sudo apt install fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei

```

更新字体缓存:

```bash

sudo fc-cache -fv

```

3 创建weston的参数文件和自启动服务脚本

3.1 创建/etc/xdg/weston/weston.ini

```ini

[core]

backend=drm-backend.so

# Allow running without input devices

require-input=false

# Disable screen idle timeout by default

idle-time=0

# The repaint-window is used to calculate repaint delay(ms) after flipped.

# value <= 0: delay = abs(value)

# value > 0: delay = vblank_duration - value

repaint-window=-1

# Allow blending with lower drm planes

# gbm-format=argb8888

[shell]

# top(default)|bottom|left|right|none, none to disable panel

panel-position=bottom

# none|minutes(default)|seconds

# clock-format=seconds

# Disable screen locking

locking=false

[libinput]

# Uncomment below to enable touch screen calibrator(weston-touch-calibrator)

# touchscreen_calibrator=true

# calibration_helper=/bin/weston-calibration-helper.sh

[keyboard]

# Comment this to enable vt switching

vt-switching=false

# Configs for auto key repeat

# repeat-rate=40

# repeat-delay=400

```

3.2 创建/etc/profile.d/weston.sh

```sh

# The env variables below can be overridden

# Comment out this for atomic related functions, e.g. sprites

export WESTON_DISABLE_ATOMIC=1

# Allow using drm modifier, e.g. ARM AFBC

# export WESTON_ALLOW_GBM_MODIFIERS=1

# Enable black background for fullscreen views

# export WESTON_FULLSCREEN_BLACK_BACKGROUND=1

# Allow disabling unused CRTCs

# WESTON_DRM_MASTER=1

# Override output's freezing time

# export WESTON_DRM_RESIZE_FREEZE_MS=1000

# Primary screen

# export WESTON_DRM_PRIMARY=eDP-1

# Single screen

# export WESTON_DRM_SINGLE_HEAD=1

# Fallback to any available connector

# export WESTON_DRM_HEAD_FALLBACK=1

# Connector selecting mode:

# default|primary|internal|external|external-dual

# export WESTON_DRM_HEAD_MODE=external-dual

# Screens layout direction

# horizontal|vertical|same-as

# export WESTON_OUTPUT_FLOW=vertical

# Virtual display size

# export WESTON_DRM_VIRTUAL_SIZE=1024x768

# Comment out these to disable mirror mode

export WESTON_DRM_MIRROR=1

export WESTON_DRM_KEEP_RATIO=1

# Disable DRM plane hardware scale feature

# export WESTON_DRM_DISABLE_PLANE_SCALE=1

# Tag file for freezing weston display

export WESTON_FREEZE_DISPLAY=/tmp/.freeze_weston

# Set dynamic config file path

# export WESTON_DRM_CONFIG=/tmp/.weston_drm.conf

#

# Dynamic config examples:

# echo "compositor:state:sleep" > /tmp/.weston_drm.conf # off + input wakeable

# echo "compositor:state:block" > /tmp/.weston_drm.conf # no input

# echo "compositor:state:freeze" > /tmp/.weston_drm.conf # no input + freeze

# echo "compositor:state:off" > /tmp/.weston_drm.conf # no input + off

# echo "compositor:state:on" > /tmp/.weston_drm.conf

# echo "output:DSI-1:off" >> /tmp/.weston_drm.conf

# echo "output:eDP-1:freeze" >> /tmp/.weston_drm.conf

# echo "output:DSI-1:on" >> /tmp/.weston_drm.conf

# echo "output:all:rotate90" >> /tmp/.weston_drm.conf

# echo "output:all:rect=<100,20,1636,2068>" >> /tmp/.weston_drm.conf

# echo "output:HDMI-A-1:mode=800x600" >> /tmp/.weston_drm.conf

# echo "output:HDMI-A-1:pos=100,200" >> /tmp/.weston_drm.conf

# echo "output:HDMI-A-1:size=1920x1080" >> /tmp/.weston_drm.conf

# echo "output:HDMI-A-1:prefer" >> /tmp/.weston_drm.conf

# echo "output:HDMI-A-1:primary" >> /tmp/.weston_drm.conf

```

3.3 创建/etc/systemd/system/weston.service

内容如下:

```ini

[Unit]

Description=Weston Wayland Compositor

After=getty@tty1.service

Conflicts=getty@tty1.service

[Service]

Type=simple

User=root

Group=root

ExecStartPre=-/bin/mkdir -p /run/user/0

ExecStartPre=-/bin/chown root:root /run/user/0

Environment=XDG_RUNTIME_DIR=/run/user/0

ExecStart=/usr/bin/weston

StandardInput=tty-force

StandardOuput=inherit

StandardError=inherit

TTYPath=/dev/tty1

TTYReset=yes

TTYVHangup=yes

RemainAfterExit=yes

Restart=always

[Install]

WantedBy=multi-user.target

```

4 QLauncher交叉编译和服务自启动脚本

4.1 QLauncher交叉编译

创建目录

```bash

mkdir /opt/qt_workspace

```

把QLauncher源码传至/opt/qt_workspace下,然后通过以下命令进行交叉编译。

```bash

cd /opt/qt_workspace/QLauncher

qmake

make -j4

```

> ##blue##

> 编译完毕后把/opt/qt_workspace/QLauncher/QLauncher程序复制到/usr/bin/目录下,然后赋予执行权限。

```bash

cp QLauncher /usr/bin/

chmod 777 /usr/bin/QLauncher

```

4.2 创建/etc/profile.d/qtwayland.sh

```sh

# The env variables below can be overridden

export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland}

```

4.3 创建/etc/systemd/system/launcher.service

内容如下:

```ini

[Unit]

Description=The Qt Desktop

After=weston.service

[Service]

Type=simple

User=root

Group=root

ExecStartPre=-/bin/mkdir -p /run/user/0

ExecStartPre=-/bin/chown root:root /run/user/0

Environment=XDG_RUNTIME_DIR=/run/user/0

#Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#Environment=LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/aarch64-linux-gnu:/lib/aarch64-linux-gnu

Environment=QT_QPA_PLATFORM=wayland

ExecStartPre=/bin/sleep 2

ExecStart=/usr/bin/QLauncher

#StandardInput=tty-force

#StandardOutput=inherit

#StandardError=inherit

#TTYPath=/dev/tty1

#TTYReset=yes

#TTYVHangup=yes

RemainAfterExit=yes

Restart=on-failure

[Install]

WantedBy=graphical.target

#WantedBy=multi-user.target

```

> ##red##

> ExecStartPre=/bin/sleep 2 先休眠2~3秒是因为weston从启动到呈现完毕需要一段时间,而QLauncher必须等待weston启动完毕后才能正常启动。如果没有等weston启动完毕就启动QLauncher,会导致QLauncher启动失败。

5 其他

5.1 查看显示协议类型

查看当前显示协议类型

```bash

echo $XDG_SESSION_TYPE

```

5.2 设置自动登录

在 Debian 的字符界面(即没有图形界面的系统)中设置自动登录,可以通过编辑系统的启动脚本来实现。以下是详细的步骤:

5.2.1 编辑 `getty` 配置

Debian 使用 `agetty` 或 `getty` 来管理终端登录。你需要编辑 `/etc/inittab` 文件或 `/etc/systemd/system/getty@.service.d/` 目录下的配置文件,具体取决于你使用的 init 系统。

5.2.2 使用 `systemd`(Debian8及以后的版本)

如果你使用的是 `systemd`(Debian 8 及更高版本默认使用 `systemd`),可以创建一个覆盖文件来配置 `getty` 服务。

1. 创建一个新的覆盖目录和文件:

```sh

sudo mkdir -p /etc/systemd/system/getty@tty1.service.d

sudo nano /etc/systemd/system/getty@tty1.service.d/override.conf

```

2. 在 `override.conf` 文件中添加以下内容:

```ini

[Service]

ExecStart=

ExecStart=-/sbin/agetty --autologin 你的用户名 --noclear %I $TERM

```

- `--autologin 你的用户名`:指定要自动登录的用户名。

- `--noclear`:可选参数,表示不清除屏幕内容。

3. 保存并退出编辑器。

4. 重新加载 `systemd` 配置并重启 `getty` 服务:

```sh

sudo systemctl daemon-reload

sudo systemctl restart getty@tty1

```

5. 你可以通过重启系统来测试自动登录是否生效:

```sh

sudo reboot

```

5.2.3 使用 `sysvinit`(Debian8以前的版本)

如果你使用的是 `sysvinit`(较旧的 Debian 版本可能使用 `sysvinit`),可以编辑 `/etc/inittab` 文件。

1. 打开 `/etc/inittab` 文件进行编辑:

```sh

sudo nano /etc/inittab

```

2. 找到类似以下的行:

```sh

1:2345:respawn:/sbin/getty 38400 tty1

```

3. 修改该行为:

```sh

1:2345:respawn:/sbin/getty --autologin 你的用户名 38400 tty1

```

4. 保存并退出编辑器。

5. 重启系统以使更改生效:

```sh

sudo reboot

```

5.2.4 验证自动登录

重启系统后,你应该会看到系统自动登录到你指定的用户账户。

5.2.5 注意事项

- **安全性**:自动登录可能会降低系统的安全性,特别是在公共或共享环境中。请确保只有受信任的用户能够访问系统。

- **多用户环境**:如果你的系统有多个用户,建议谨慎使用自动登录功能。

通过以上步骤,你应该能够在 Debian 的字符界面中成功设置自动登录。

全部评论
暂无评论
0/144