飞腾派OS(无桌面版本基于Debian11)安装weston桌面及Qt测试
0 先更新
sudo apt update
sudo apt upgrade
1 安装xwayland协议及weston桌面
sudo apt install xwayland weston
依赖的软件包:
- libfreerdp2-2
- libweston-10-0
- libwinpr2-2
- freerdp2-x11
2 安装Qt5
2.1 安装qt5组件
sudo apt install build-essential
2.2 安装Qt5基础库和开发工具
sudo apt install qtbase5-dev qtbase5-dev-tools
2.3 安装相关组件
sudo apt install qtwayland5
sudo apt install libqt5serialport5 libqt5serialport5-dev
sudo apt install qtwebengine5-*
sudo apt install libqt5webengine5
3 安装中文字符集和中文字体
3.1 安装中文字符集
检查和设置区域(Locale)
locale
安装中文语言字符集支持
sudo apt update
sudo apt install locales
sudo dpkg-reconfigure locales
在dpkg-reconfigure界面中,选择zh_CN.UTF-8等中文选项,确保它们被选中。
设置环境变量
编辑/.bashrc或者/.profile文件,添加以下内容:
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
export LC_ALL=zh_CN.UTF-8
保存后,使用以下命令使更改生效:
source ~/.bashrc
3.2 安装中文字体
安装中文字体如下:
sudo apt update
sudo apt install fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei
更新字体缓存:
sudo fc-cache -fv
3 创建weston的参数文件和自启动服务脚本
3.1 创建/etc/xdg/weston/weston.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
# 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
内容如下:
[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交叉编译
创建目录
mkdir /opt/qt_workspace
把QLauncher源码传至/opt/qt_workspace下,然后通过以下命令进行交叉编译。
创建目录mkdir /opt/qt_workspace
把QLauncher源码传至/opt/qt_workspace下,然后通过以下命令进行交叉编译。
cd /opt/qt_workspace/QLauncher
qmake
make -j4
##blue##
编译完毕后把/opt/qt_workspace/QLauncher/QLauncher程序复制到/usr/bin/目录下,然后赋予执行权限。
cp QLauncher /usr/bin/
chmod 777 /usr/bin/QLauncher
4.2 创建/etc/profile.d/qtwayland.sh
# The env variables below can be overridden
export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland}
4.3 创建/etc/systemd/system/launcher.service
内容如下:
[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
ExecStartPre=/bin/sleep 2 先休眠2~3秒是因为weston从启动到呈现完毕需要一段时间,而QLauncher必须等待weston启动完毕后才能正常启动。如果没有等weston启动完毕就启动QLauncher,会导致QLauncher启动失败。
5 其他
5.1 查看显示协议类型
查看当前显示协议类型
在这里插入代码片
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
服务。
-
创建一个新的覆盖目录和文件:
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d sudo nano /etc/systemd/system/getty@tty1.service.d/override.conf
sudo mkdir -p /etc/systemd/system/getty@tty1.service.d
sudo nano /etc/systemd/system/getty@tty1.service.d/override.conf
2.在override.conf
文件中添加以下内容:
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin 你的用户名 --noclear %I $TERM
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin 你的用户名 --noclear %I $TERM
--autologin 你的用户名
:指定要自动登录的用户名。--noclear
:可选参数,表示不清除屏幕内容。
3.保存并退出编辑器。
4.重新加载 systemd
配置并重启 getty
服务:
sudo systemctl daemon-reload
sudo systemctl restart getty@tty1
5.你可以通过重启系统来测试自动登录是否生效:
sudo reboot
5.2.3 使用 sysvinit
(Debian8以前的版本)
如果你使用的是 sysvinit
(较旧的 Debian 版本可能使用 sysvinit
),可以编辑 /etc/inittab
文件。
-
打开
/etc/inittab
文件进行编辑:
sudo nano /etc/inittab
2.找到类似以下的行:
1:2345:respawn:/sbin/getty 38400 tty1
修改该行为:
1:2345:respawn:/sbin/getty --autologin 你的用户名 38400 tty1
4. 保存并退出编辑器。
- 重启系统以使更改生效:
sudo reboot
5.2.4 验证自动登录
重启系统后,你应该会看到系统自动登录到你指定的用户账户。
5.2.5 注意事项
- 安全性:自动登录可能会降低系统的安全性,特别是在公共或共享环境中。请确保只有受信任的用户能够访问系统。
- 多用户环境:如果你的系统有多个用户,建议谨慎使用自动登录功能。
通过以上步骤,你应该能够在 Debian 的字符界面中成功设置自动登录。如果有任何问题,请随时告诉我!