wslg-在不安装包本身的情况下提供依赖项-传递声音-pulseaudio-虚假依赖包
上一级页面:index-wsl
前言
许多Linux的图形应用程序都包含对它们所需的GUI实现包的依赖性,但WSLG已经提供了完美的支持,
如果你使用WSLG。因为WSLg已经为您提供了一个完美工作的副本,这些GUI的依赖包不应当安装在wsl中,反而应当以虚拟包的方式提供。
如果还有你觉得麻烦的任何GUI的依赖包,都可以自己制作虚拟包,以虚拟包的方式提供给应用程序。
例如,WSLG
已经提供了完美的pulseaudio``和xwayland
依赖支持,在wsl中不必再安装这些包,通过WSLG可以获取开箱即用的体验,
但问题是:某些工作在wsl2中的应用程序,这些应用程序会要求你补充GUI依赖,否则就报error并停止工作。正常的解决方案是安装一些fake-package
(虚拟包),在不安装package
本身的情况下,为应用程序提供依赖项。
并且,事实上,如果你使用WSLG,你不应当在WSL2中安装真实的GUI依赖包,如pulseaudio``和xwayland
,
首先要做的就是卸载pulseaudio``和xwayland
等GUI的依赖包。
然后在wsl中安装fake-package
(虚拟包),这样在不安装GUI的依赖包的情况下,为应用程序提供依赖项
阅读说明:WSLg FAQ · arkane-systems/genie Wiki (github.com)
首先,应当卸载wsl2中的原有GUI的依赖包
sudo apt remove xwayland
sudo apt remove pulseaudio
然后,前往仓库仔细阅读说明,阿卡内系统/假包装 (github.com)
根据说明,首先添加仓库,添加仓库方法见这个网页:wsl-transdebian | A repository for WSL-only apt packages. (arkane-systems.github.io),
根据页面提示添加仓库,(下面只是一个例子,请阅读网页获取最新的安装方法)
sudo -s
apt install lsb-release
wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF
apt update
exit
最后,安装fake-package
(虚拟包)
sudo apt install pulseaudio-dummy
sudo apt install xwayland-dummy
高级配置
如果你使用WSLG。因为WSLg已经为您提供了一个完美工作的副本,这些GUI的依赖包不应当安装在wsl中,反而应当以虚拟包的方式提供。
如果还有你觉得麻烦的任何GUI的依赖包,都可以自己制作虚拟包,以虚拟包的方式提供给应用程序。
首先安装和启动 equivs,
sudo apt install equivs
制作一些分别提供 pulseaudio 和 xwayland 的虚拟包(或者你觉得麻烦的任何其他GUI依赖包)。
mkdir ~/src
cd ~/src
equivs equivs-control <packageToFake>
<packageToFake>
是你要虚拟的原始包的名称,例如pulseaudio-dummy
dummy
表示他是一个虚拟包,也可以换成其他你喜欢的名称
sudo equivs-control pulseaudio-dummy
这样创建了一个描述文件,然后编辑他
vim pulseaudio
默认描述文件应当类似于这样:
### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: <source package name; defaults to package name>
Section: misc
Priority: optional
# Homepage: <enter URL here; no default>
Standards-Version: 3.9.2
Package: <package name; defaults to equivs-dummy>
# Version: <enter version here; defaults to 1.0>
# Maintainer: Your Name <yourname@example.com>
# Pre-Depends: <comma-separated list of packages>
# Depends: <comma-separated list of packages>
# Recommends: <comma-separated list of packages>
# Suggests: <comma-separated list of packages>
# Provides: <comma-separated list of packages>
# Replaces: <comma-separated list of packages>
# Architecture: all
# Multi-Arch: <one of: foreign|same|allowed>
# Copyright: <copyright file; defaults to GPL2>
# Changelog: <changelog file; defaults to a generic changelog>
# Readme: <README.Debian file; defaults to a generic one>
# Extra-Files: <comma-separated list of additional files for the doc directory>
# Links: <pair of space-separated paths; First is path symlink points at, second is filename of link>
# Files: <pair of space-separated paths; First is file to include, second is destination>
# <more pairs, if there's more than one file to include. Notice the starting space>
Description: <short description; defaults to some wise words>
long description and info
.
second paragraph
编辑你所需要的项,例如指定包名称、版本等
Section: misc
Priority: optional
Standards-Version: 3.9.2
Package: pulseaudio
Version: 99:99
Maintainer: Your Name <yourname@example.com>
Provides: package-to-fake, another-package-to-fake
Architecture: all
Description: dummy pulseaudio package
A dummy package with a version number so high that the real pulseaudio packages
will never reach it.
包名称(Package)必须与您尝试替换的名称匹配,例如我尝试替换pulseaudio
版本号(Version)应高于实际包,并且应当遵循命名规则,见Debian 政策手册 - 版本编号 (fifi.org)
如果你不确定,先搜索一下官方包的版本号,你的虚拟包的版本号要高于官方包
sudo apt search pulseaudio
然后构建它
equivs-build pulseaudio-dummy
这将生成您的pulseaudio_99.99_all.deb
,
您现在可以像往常一样使用 dpkg -i
安装。
dpkg -i pulseaudio_99.99_all.deb
通过安装这些虚拟包,将满足依赖关系,并且您可以使用需要这些依赖项的应用程序,而不必安装自己的无用服务副本,因为WSLg已经为您提供了一个完美工作的副本。
参考、引用、致谢
“打开一个 Linux shell”和精灵 ·arkane-systems/genie Wiki (github.com)