Weston
Weston 是一个开源的、基于Wayland 显示服务器协议的窗口管理器(compositor),专为正确性、可靠性、可预测性和性能而设计。Weston作为Wayland协议的实现,提供了显示管理器的窗口管理和基本功能 ,包括不限于窗口的创建、移动、缩放、透明度处理、输入事件分发以及多屏幕支持等功能。
安装[编辑 | 编辑源代码]
使用[编辑 | 编辑源代码]
要以本机方式(从 TTY)启动 Weston 或在正在运行的 X 会话中运行 Weston:
$ weston
想了解详细信息和配置,请参阅 weston(1) 。
示例应用[编辑 | 编辑源代码]
在 Weston 中内置了原生wayland演示应用,可以运行这些示例程序。要启动终端仿真器,请执行以下命令:
$ weston-terminal
可移动的花
$ weston-flower
显示图片
$ weston-image image1.jpg image2.jpg...
快捷键[编辑 | 编辑源代码]
Super
(windows按键) 可以自定义, 详细查看 weston.ini组合键 | 动作 |
---|---|
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-1
和 DVI-I-1
。
Xwayland[编辑 | 编辑源代码]
请参阅 Wayland#Xwayland 了解可用软件包的详细信息和概述。
设置以下内容以开启 Xwayland 的使用:
~/.config/weston.ini
[core] xwayland=true
高 DPI 显示器[编辑 | 编辑源代码]
~/.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
请确保 User
和 Group
条目是使用有效的用户。同时还需创一个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
然后,可以使用 FFmpeg 或 x264包 将 YUV 文件转码为其他格式(有关详细信息,请参阅 x264 -h
)。
窗口切换[编辑 | 编辑源代码]
要切换带有 Super+Space
而不是 Super+Tab
的窗口,请在 desktop-shell/shell.c
中将 KEY_TAB
更改为 KEY_SPACE
,然后重新编译 weston包。
触摸屏幕映射[编辑 | 编辑源代码]
触摸显示映射可以通过使用 udev 规则来实现。就像 WL_SEAT
或 ID_SEAT
设备环境变量将设备绑定到指定的席位一样,WL_OUTPUT
变量可用于将设备绑定到相应的输出。此变量应与显示器名称匹配。有关显示器命名约定的说明,请参见 #显示器。