二,运行Weston
Posted 小B伏枥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二,运行Weston相关的知识,希望对你有一定的参考价值。
libweston运用了后端(back-end)的概念,实现了对其底层运行环境的抽象。最终,这个抽象的后端负责获处理输入和产生输出。Weston是libweston的使用者,也就是说Weston是建立在libweston之上的。可以运行在很多不同的back-ends之上(因为libweston支持这些后端),包括nested,X11,DRM/KMS,还有已经过时的fbdev。
在大多数情况下,人们应该能够允许Weston可以自动选择backend。这种情况出现在运行Weston的机器上存在不同的图形环境。这个图形环境可以是另一个基于wayland合成器的weston也可以是x11等。当你认为Weston选择的backend不是最好的,也可以手动选择你所期望的。这种情况下,可以通过“-B [backend.so]”来选择加载一个不同的backend。不同的back-end使用不同的方式来获取输入和产生输出,也就意味着最适合的back-end依赖于当前使用的运行环境。
支持的back-ends:
-
drm – 独立运行在 DRM/KMS 和 evdev (推荐) (DRM kernel doc)
-
wayland – 作为一个Wayland程序运行,嵌套在另一个Wayland合成器实例中。(wayland既指Wayland协议,也指基于wayland协议开发的back-end。)
-
x11 – 作为X11程序运行,嵌套在另一个X11 显示服务器实例当中。
-
rdp – 作为RDP服务器运行,没有输入处理和输出产生机制。
-
headless – 作为测试套件运行,没有输入处理和输出产生机制。
-
fbdev – 独立运行在fbdev/evdev上。 (已过时)
Weston的工作主要由渲染器通过收集所有需要被显示输出的图层(surface或者window)并进行拼接。在通过将所有图层合成为一张图片,再分发给后端(back-end),最终显示到屏幕上去。
libweston不仅拥有一个由Pixman库实现的基于CPU的渲染器,也包含一个由OpenGL ES实现的基于GPU的渲染器(我们称之为GL渲染器)
当运行Weston的时候,大部分后端提供了一个命令行选项(--use-pixman),可以通过该选项来关闭GL渲染器。
一些额外的配置步骤
在启动Weston之前,可能需要一些额外的配置步骤,取决于你的Weston发行版本,即使一些当前的发行版本已经做了相关的配置。
Weston会在一些指定的目录下创建一些unix socket(如wayland-1)。这些目录通过环境变量$XDG_RUNTIME_DIR来配置。客户端会通过相同的变量来找到这些socket。正常情况下,这些socket应该由systemd来提供。如果你是用的发行版本没有配置这些环境变量,就需要你进行手动来配置。
在图形环境上运行Weston
如前所述,你已经处于一个图形环境当中,Weston将会推断并尝试加载正确的back-end.可以运行在一个Wayland合成器实例中,也可以运行在X11服务器上。
在独立的back-end上运行Weston
现在我们已经了解了back-end概念和渲染器。是时候引入seat的概念。一个独立后端需要一个seat。那么seat是什么呢?seat是一套输入设备(如鼠标,键盘)和输出设备(显示器)的集合,也可以包含显卡,声卡或者摄像头等。一台计算机可以服务多个seat。
默认情况下,Weston使用seat0作为默认的seat。如果有其他特有的seat,Weston通过“--seat”来设定。
你可以从VT启动weston,并假设存在一个支持libseat运行的seat管理器。如seatd或logind。libseat通过变量$LIBSEAT_BACKEND来选择backend。如果libseat和seatd都被成功安装。但是seatd没有运行,可以通过sudo --seatd -g video来启动它。如果没有可用的seat管理器,你可以通过weston-launch应用程序来处理VT的切换。
除此之外,我们可以通过ssh或串行中断来启动Weston。最简单的方法就是通过libseat启动器seatd来启动weston。可以通过tty命令行来启weston作为root运行。如weston --tty 2如果TTY 2是激活状态。
在独立的back-end上不同Seat上运行Weston
如果可以在已经运行的Wayland合成器或者X11服务器上测试Weston,我们拥有一个额外的GPU,那么可以创建一个新的seat,且这个seat可以访问这个额外的GPU,并且把这个GPU分配给这个新的seat。从而达到Weston可以独占该GPU。
下面是一些必须的步骤:
1.在同一台机器上拥有一个额外的GPU(也就是说,除了一个已经被其他图形环境使用的GPU,还额外拥有一个已经集成了的GPU)
2.创建一个udev我呢间来分配该GPU到一个新的seat中。
3.在这个seat上启动Weston。
通过在/etc/udev/rule.d/来创建一个udev文件,文件内容可参考下面:
ACTION=="remove", GOTO="id_insecure_seat_end"
SUBSYSTEM=="drm", KERNEL=="card*", KERNELS=="0000:00:02.0", ENVID_SEAT="seat-insecure"
SUBSYSTEM=="input", ATTRSidVendor=="222a", ATTRSidProduct=="004d", OWNER="your_user_id", ENVID_SEAT="seat-insecure", ENVWL_OUTPUT="HDMI-A-1"
SUBSYSTEM=="input", ATTRSidVendor=="03f0", ATTRSidProduct=="1198", OWNER="your_user_id", ENVID_SEAT="seat-insecure"
LABEL="id_insecure_seat_end"
通过使用上面创建的新的udev文件,设备将其分配给新的seat,来跳过你正常的显示环境。udev的命名需要遵循一定的规则,可参考(man 7 udev)命令。如,你可以使用"63-insecure-seat.rules"作为一个文件名。
如上面的例子,有两个输入设备,一个是触屏,被分配给了指定的输出(HDMI-A-1);一个是鼠标。注意如何定义ENVID_SEAT
和ENVWL_OUTPUT
seat的名字。各自的被分配给了指定的输出。
通过udevadm命令可以提取udev的键值对信息,如udevadm info -a /dev/dri/cardX命令会列出整个udev键值信息。当然也可以通过lsusb或者lspci命令来检索PCI供应商信息和相关联的设备码。
如果没有输入设备。DRM后端可以通过追加参数来配置,如--continue-without-input。或者修改weston.ini配置信息(在core部分添加require-input=false).
weston在运行的时候可以选择DRM后端和指定seat-insecure,通过下面的命令:
./weston -Bdrm-backend.so --seat=seat-insecure
以上是关于二,运行Weston的主要内容,如果未能解决你的问题,请参考以下文章