Weston

来自 Arch Linux 中文维基

Weston 是一个开源的、基于Wayland 显示服务器协议的窗口管理器(compositor),专为正确性、可靠性、可预测性和性能而设计。Weston作为Wayland协议的实现,提供了显示管理器的窗口管理和基本功能 ,包括不限于窗口的创建、移动、缩放、透明度处理、输入事件分发以及多屏幕支持等功能。

安装[编辑 | 编辑源代码]

安装 weston 软件包。

使用[编辑 | 编辑源代码]

要以本机方式(从 TTY)启动 Weston 或在正在运行的 X 会话中运行 Weston:

$ weston

想了解详细信息和配置,请参阅 weston(1)

示例应用[编辑 | 编辑源代码]

在 Weston 中内置了原生wayland演示应用,可以运行这些示例程序。要启动终端仿真器,请执行以下命令:

$ weston-terminal

可移动的花

$ weston-flower 

显示图片

$ weston-image image1.jpg image2.jpg...

快捷键[编辑 | 编辑源代码]

提示:Super (windows按键) 可以自定义, 详细查看 weston.ini
Weston 键盘快捷键
组合键 动作
Ctrl+Alt+Backspace 退出 Weston 合成器
Super+Scroll (或 PageUp/PageDown) 放大/缩小 窗口
Super+Tab 切换窗口
Super+LMB 启动窗口
Super+MMB 旋转窗口
Super+RMB 改变窗口大小
Super+Alt+Scroll 改变窗口透明度
Super+k 强制关闭当前活动窗口
Super+Up/Down 切换到 上一个/下一个 工作区
Super+Shift+Up/Down 移动当前活动窗口到其他工作区
Super+Fn 切换到工作区n (例如:F2)
Super+s 截屏
Super+r 录制屏幕

配置[编辑 | 编辑源代码]

下面是一个示例配置文件。参见 weston.ini(5) 了解更多信息。

~/.config/weston.ini
[core]
# xwayland support
xwayland=true

[libinput]
enable-tap=true

[shell]
#background-image=/usr/share/backgrounds/gnome/Aqua.jpg
background-type=scale-crop
background-color=0xff000000
#background-color=0xff002244
#panel-color=0x90ff0000
panel-color=0x00ffffff
panel-position=bottom
#clock-format=none
#animation=zoom
#startup-animation=none
close-animation=none
focus-animation=dim-layer
#binding-modifier=ctrl
num-workspaces=6
locking=false
cursor-theme=Adwaita
cursor-size=24

# 平板电脑选项
#lockscreen-icon=/usr/share/icons/gnome/256x256/actions/lock.png
#lockscreen=/usr/share/backgrounds/gnome/Garden.jpg
#homescreen=/usr/share/backgrounds/gnome/Blinds.jpg
#animation=fade

# 用于笔记本电脑显示器
[output]
name=LVDS1
mode=preferred
#mode=1680x1050
#transform=rotate-90

#[output]
#name=VGA1
# 下面使用 modeline 设置模式,您可以使用 cvt 工具获取首选分辨率的模式线
#mode=173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
#transform=flipped

#[output]
#name=X1
#mode=1024x768
#transform=flipped-rotate-270

# 屏幕键盘输入法
#[input-method]
#path=/usr/lib/weston/weston-keyboard

[keyboard]
keymap_rules=evdev
#keymap_layout=us,de
#keymap_variant=colemak,
#keymap_options=grp:shifts_toggle
#keymap_options=caps:ctrl_modifier,shift:both_capslock_cancel
repeat-rate=30
repeat-delay=300

# keymap_options from /usr/share/X11/xkb/rules/base.lst
#numlock-on=true

[terminal]
font=monospace
font-size=18

[launcher]
icon=/usr/share/weston/icon_flower.png
path=/usr/bin/weston-flower

[launcher]
icon=/usr/share/icons/gnome/32x32/apps/utilities-terminal.png
path=/usr/bin/weston-terminal --shell=/usr/bin/bash

#[launcher]
#icon=/usr/share/icons/gnome/32x32/apps/utilities-terminal.png
#path=/usr/bin/gnome-terminal

[launcher]
icon=/usr/share/icons/hicolor/32x32/apps/firefox.png
path=MOZ_ENABLE_WAYLAND=1 /usr/bin/firefox

#[launcher]
#icon=/usr/share/icons/Adwaita/32x32/apps/multimedia-volume-control.png
#path=/usr/bin/st alsamixer -c0

最少 weston.ini 配置:

~/.config/weston.ini
[core]
xwayland=true

[keyboard]
keymap_layout=us

[launcher]
icon=/usr/share/weston/terminal.png
path=/usr/bin/weston-terminal

显示器[编辑 | 编辑源代码]

Weston 的输出与 xorg.conf 显示器的输出略有不同:

$ ls /sys/class/drm
card0
card0-VGA-1
card1
card1-DVI-I-1
card1-HDMI-A-1
card1-VGA-2

card0 是未使用的显卡(内置视频适配器)。附加适配器 card1 通过视频线连接到一个 HDMI 和一个 DVI 显示器,因此输出名称为 HDMI-A-1DVI-I-1

Xwayland[编辑 | 编辑源代码]

请参阅 Wayland#Xwayland 了解可用软件包的详细信息和概述。

设置以下内容以开启 Xwayland 的使用:

~/.config/weston.ini
[core]
xwayland=true
注意: 如果尚未配置 X,则可能需要配置键盘映射: Xorg中的键盘配置

高 DPI 显示器[编辑 | 编辑源代码]

对于 RetinaHiDPI 的显示器, 使用:

~/.config/weston.ini
[output]
name=...
scale=2

Weston 字体[编辑 | 编辑源代码]

Weston 使用默认的无衬线字体作为窗口标题栏、时钟等。有关如何更改此字体的说明,请参见 字体配置#设置默认和后备字体

Systemd启动[编辑 | 编辑源代码]

weston虽没法作为systemd系统服务启动,但可通过systemd用户服务进行启动,我们先创建 weston 的服务和 socket 单元

systemd用户服务启动[编辑 | 编辑源代码]

创建用户级weston套节字(socket) 单元,用于监听图形应用

提示:若您没有 /etc/systemd/user/ 目录的权限,也可在 $HOME/.config/systemd/user 目录下进行创建,两者使用效果相同
/etc/systemd/user/weston.socket
[Unit]
Description=Weston, a Wayland compositor
Documentation=man:weston(1) man:weston.ini(5)
Documentation=https://wayland.freedesktop.org/

[Socket]
ListenStream=%t/wayland-0

创建用户级weston服务(service)单元

/etc/systemd/user/weston.service
[Unit]
Description=Weston, a Wayland compositor, as a user service
Documentation=man:weston(1) man:weston.ini(5)
Documentation=https://wayland.freedesktop.org/

# 使用 systemd 套接字激活
Requires=weston.socket
After=weston.socket

# 由于我们是图形会话的一部分,因此请确保我们之前已启动
Before=graphical-session.target

[Service]
Type=notify
TimeoutStartSec=60
WatchdogSec=20
# 日志默认输出到journal
#StandardOutput=journal
StandardError=journal
# 确保已创建最少配置 ~/.config/weston.ini
ExecStart=/usr/bin/weston --modules=systemd-notify.so

[Install]
WantedBy=graphical-session.target

创建完毕后重新加载 systemd --user daemon-reload ,然后在使用 systemd --user start weston.service 启动weston

以上的使用需要我们提前登录到系统,并手动运行,若想实现自动启动请参考下面步骤。

systemd系统会话管理[编辑 | 编辑源代码]

一些场合下,我们希望在系统引导后自动启动weston,当然也支持ssh远程登录后手动启动weston,如您不想使用第三方登录管理器,也可使用systemd服务单元来完成该操作,下面使用sysemd服务来创建用户会话

注意: 访问/etc/systemd/system/要使用root权限,普通用户无法创建
/etc/systemd/system/weston-autologin.service
[Unit]
Description=Weston graphical session

# 确保我们在允许登录后启动。
After=systemd-user-sessions.service

# 如果需要,可以将其作为图形会话的一部分。
#Before=graphical.target

# 不是不需,但以防万一。
#ConditionPathExists=/dev/tty7

[Service]
Type=simple
Environment=XDG_SESSION_TYPE=wayland
ExecStart=/usr/bin/systemctl --wait --user start weston-session.target

# 要运行会话的用户。需要依据实际用户修改!
User=user
Group=user

# 为 Weston 要求的用户设置完整的用户会话。
PAMName=login

# 需要一个虚拟终端。
TTYPath=/dev/tty7
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes

# 如果不控制 tty,则无法启动。
StandardInput=tty-fail

# 日志输出默认为journal
#StandardOutput=journal
StandardError=journal

# 使用 utmp 记录此用户,让它显示命令 'w' 和 'who'
UtmpIdentifier=tty7
UtmpMode=user

[Install]
WantedBy=graphical.target

请确保 UserGroup 条目是使用有效的用户。同时还需创一个weston-session.target的用户target

/etc/systemd/user/weston-session.target
[Unit]
Description=Weston session

BindsTo=weston-session.target
Before=weston-session.target

通知系统重新加载配置

 $ sudo systemd damon-reload
 $ systemd damon-reload --user

最后确保您的默认target使用的是graphical

 $ sudo systemctl set-default graphical.target
 $ systemctl --user set-default graphical-session.target

提示与技巧[编辑 | 编辑源代码]

录像录制[编辑 | 编辑源代码]

Weston 具有内置的截屏和视频录制功能,可以通过按 Super+r 组合键来启动和停止。截屏视频保存到 Weston 当前工作目录中的文件 capture.wcap 中。WCAP 格式是 Weston 特有的无损视频格式,它只记录帧数的差异。为了能够播放录制的截屏视频,需要将WCAP文件转换为媒体播放器可以理解的格式。首先,将捕获转换为 YUV 像素格式:

$ wcap-decode --yuv4mpeg2 capture.wcap > capture.y4m

然后,可以使用 FFmpegx264 将 YUV 文件转码为其他格式(有关详细信息,请参阅 x264 -h)。

窗口切换[编辑 | 编辑源代码]

要切换带有 Super+Space 而不是 Super+Tab 的窗口,请在 desktop-shell/shell.c 中将 KEY_TAB 更改为 KEY_SPACE,然后重新编译 weston

触摸屏幕映射[编辑 | 编辑源代码]

触摸显示映射可以通过使用 udev 规则来实现。就像 WL_SEATID_SEAT 设备环境变量将设备绑定到指定的席位一样,WL_OUTPUT 变量可用于将设备绑定到相应的输出。此变量应与显示器名称匹配。有关显示器命名约定的说明,请参见 #显示器

参考[编辑 | 编辑源代码]