以下操作都是在飞腾派中执行,具体测试步骤如下:
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 的字符界面中成功设置自动登录。

