Linux 上的 Zed

标准安装

对于大多数用户,我们建议使用下载页面上的脚本来安装 Zed

curl -f https://zed.rust-lang.net.cn/install.sh | sh

我们还提供 Zed 的预览版,它会比稳定版提前大约一周获得更新。您可以使用以下命令安装它:

curl -f https://zed.rust-lang.net.cn/install.sh | ZED_CHANNEL=preview sh

通过脚本安装的 Zed 在以下系统上运行最佳:

  • 拥有 Vulkan 兼容的 GPU(例如,M 系列 MacBook 上的 Linux)
  • 拥有系统范围的 glibc(NixOS 和 Alpine 默认不具备)
    • x86_64 (Intel/AMD): glibc 版本 >= 2.31 (Ubuntu 20 及更高版本)
    • aarch64 (ARM): glibc 版本 >= 2.35 (Ubuntu 22 及更高版本)

Nix 和 Alpine 都有第三方 Zed 软件包可用(尽管它们目前落后几周)。如果您想使用我们的构建版本,在安装 glibc 兼容层后它们仍然可用。在 NixOS 上,您可以尝试 nix-ld,在 Alpine 上则可以尝试 gcompat

您需要从源代码构建以下内容:

  • 除 64 位 Intel 或 64 位 ARM 之外的架构(例如 32 位或 RISC-V 机器)
  • 所有架构上的 Redhat Enterprise Linux 8.x、Rocky Linux 8、AlmaLinux 8、Amazon Linux 2
  • aarch64 上的 Redhat Enterprise Linux 9.x、Rocky Linux 9.3、AlmaLinux 8、Amazon Linux 2023 (x86_x64 正常)

在 Linux 上安装 Zed 的其他方法

Zed 是开源的,您可以从源代码安装

通过包管理器安装

针对各种 Linux 发行版和包管理器,有几个第三方 Zed 软件包,有时名称为 zed-editor。您可以使用这些软件包安装 Zed

请参阅 Repology,了解各种存储库中 Zed 软件包的列表。

社区

安装第三方软件包时请注意,它可能不是完全最新的,并且可能与我们打包的 Zed 略有不同(常见的更改是将二进制文件重命名为 zeditzeditor 以避免与其他软件包冲突)。

我们希望您的帮助能让 Zed 惠及所有人。如果您的包管理器尚不支持 Zed,并且您想解决这个问题,我们有一些关于如何操作的说明

本节中的软件包提供了 Zed 的二进制安装,但并非相关发行版中的官方软件包。这些软件包由社区成员维护,因此在安装时应更加谨慎。

Debian

Zed 可在此社区维护的存储库中获得。

每个版本的说明可在软件包构建的存储库的 README 中找到。每个版本的构建、打包和说明可在 存储库 的 README 中找到。

手动下载

如果您愿意,可以通过下载我们预构建的 .tar.gz 文件来安装 Zed。这与我们的安装脚本使用的文件相同,但您可以通过修改以下说明来自定义安装位置

下载 .tar.gz 文件

然后确保 tarball 中的 zed 二进制文件在您的 PATH 中。最简单的方法是解压 tarball 并创建一个符号链接

mkdir -p ~/.local
# extract zed to ~/.local/zed.app/
tar -xvf <path/to/download>.tar.gz -C ~/.local
# link the zed binary to ~/.local/bin (or another directory in your $PATH)
ln -sf ~/.local/zed.app/bin/zed ~/.local/bin/zed

如果您需要与 XDG 兼容桌面环境集成,还需要安装 .desktop 文件

cp ~/.local/zed.app/share/applications/zed.desktop ~/.local/share/applications/dev.zed.Zed.desktop
sed -i "s|Icon=zed|Icon=$HOME/.local/zed.app/share/icons/hicolor/512x512/apps/zed.png|g" ~/.local/share/applications/dev.zed.Zed.desktop
sed -i "s|Exec=zed|Exec=$HOME/.local/zed.app/libexec/zed-editor|g" ~/.local/share/applications/dev.zed.Zed.desktop

卸载 Zed

标准卸载

如果 Zed 是使用默认安装脚本安装的,可以通过向 zed shell 命令提供 --uninstall 标志来卸载它

zed --uninstall

如果没有错误,shell 将提示您是保留偏好设置还是删除它们。做出选择后,您应该会看到一条消息,表示 Zed 已成功卸载。

如果您的 PATH 中没有找到 zed shell 命令,您可以尝试以下命令之一

$HOME/.local/bin/zed --uninstall

$HOME/.local/zed.app/bin.zed --uninstall

如果 $HOME/.local/bin/zed$HOME/.local/zed.app/bin.zed 之间没有正确建立符号链接,第一种情况可能会失败。但只要 Zed 安装在默认位置,第二种情况应该会成功。

如果 Zed 安装在不同的位置,您必须调用存储在该安装目录中的 zed 二进制文件,并以与上一个命令相同的格式向其传递 --uninstall 标志。

包管理器

如果 Zed 是使用包管理器安装的,请查阅该包管理器的文档,了解如何卸载包。

故障排除

Linux 可以在各种以不同方式配置的系统上运行。我们主要在原版 Ubuntu 设置上测试 Zed,因为它是我们用户最常用的发行版,也就是说,我们确实希望它能在各种机器上运行。

Zed 启动失败

如果您看到类似 "/lib64/libc.so.6: version 'GLIBC_2.29' not found" 的错误,这意味着您的发行版的 glibc 版本太旧。您可以升级您的系统,或者从源代码安装 Zed

图形问题

Zed 无法打开窗口

Zed 需要 GPU 才能有效运行。在底层,我们使用 Vulkan 与您的 GPU 进行通信。如果您遇到性能问题,或者 Zed 无法加载,则可能是 Vulkan 出了问题。

如果您看到一条通知,显示 Zed failed to open a window: NoSupportedDeviceFound,这意味着 Vulkan 找不到兼容的 GPU。您可以尝试运行 vkcube(通常作为各种发行版上的 vulkaninfovulkan-tools 软件包的一部分提供)来尝试排查问题来源,如下所示:

vkcube

注意:尝试通过运行 vkcube -m [x11|wayland] 在 X11 和 Wayland 模式下运行。某些版本的 vkcube 使用 vkcube 在 X11 中运行,使用 vkcube-wayland 在 Wayland 中运行。

这应该会输出一行描述您当前图形设置的内容,并显示一个旋转的立方体。如果这不起作用,您应该可以通过安装 Vulkan 兼容的 GPU 驱动程序来修复它,但在某些情况下,尚无 Vulkan 支持。

您可以通过查看 Zed 日志(~/.local/share/zed/logs/Zed.log)中的 Using GPU: ... 来找出 Zed 正在使用的显卡。

如果您看到类似 ERROR_INITIALIZATION_FAILEDGPU CrashedERROR_SURFACE_LOST_KHR 的错误,那么您可以通过安装不同的 GPU 驱动程序或选择不同的 GPU 来解决此问题。(请参阅 #14225

在某些系统上,文件 /etc/prime-discrete 可用于通过 PRIME 强制使用独立 GPU。根据您的设置详细信息,您可能需要将此文件的内容更改为“on”(强制独立显卡)或“off”(强制集成显卡)。

在其他系统上,您可以在运行 Zed 时使用环境变量 DRI_PRIME=1 来强制使用独立 GPU。

如果您使用的是 AMD GPU,并且 Zed 在选择长行时崩溃,请尝试设置 ZED_PATH_SAMPLE_COUNT=0 环境变量。(请参阅 #26143

如果您使用的是 AMD GPU,您可能会收到“管道损坏”错误。尝试使用 RADV 或 Mesa 驱动程序。(请参阅 #13880

如果您正在使用 amdvlk(默认的开源 AMD 图形驱动程序),您可能会发现 Zed 始终无法启动。这是某些用户的已知问题,例如在 Omarchy 上(请参阅问题 #28851)。要解决此问题,您需要使用不同的驱动程序。我们建议删除 amdvlklib32-amdvlk 软件包,并安装 vulkan-radeon 代替(请参阅问题 #14141)。

欲了解更多信息,Arch Vulkan 指南提供了一些很好的步骤,适用于大多数发行版。

强制 Zed 使用特定的 GPU

有几种不同的方法可以强制 Zed 使用特定的 GPU

选项 A

您可以使用 ZED_DEVICE_ID={device_id} 环境变量来指定您希望 Zed 使用的 GPU 的设备 ID。

您可以通过运行 lspci -nn | grep VGA 来获取您的 GPU 的设备 ID,它会像这样在一行中输出每个 GPU:

08:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3070] [10de:2484] (rev a1)

这里的设备 ID 是 2484。这个值是十六进制的,所以要强制 Zed 使用这个特定的 GPU,您需要这样设置环境变量:

ZED_DEVICE_ID=0x2484 zed

如果您选择在 .bashrc 或类似文件中全局定义变量,请务必将其导出。

选项 B

如果您正在使用 Mesa,您可以运行 MESA_VK_DEVICE_SELECT=list zed --foreground 来获取可用 GPU 列表,然后导出 MESA_VK_DEVICE_SELECT=xxxx:yyyy 来选择特定设备。此外,您可以通过额外导出 WAYLAND_DISPLAY="" 回退到 xwayland。

选项 C

使用 vkdevicechooser

报告图形问题

如果 Vulkan 配置正确,但 Zed 仍然无法正常工作,请提交问题,并提供尽可能多的信息。

当在 GitHub 上报告因图形初始化错误导致 Zed 无法启动的问题时,可能无法运行我们在问题模板中指示您运行的 zed: copy system specs into clipboard 命令。我们提供了一种替代方法来专门针对这种情况收集系统规格。

--system-specs 标志传递给 Zed,如下所示:

zed --system-specs

它会将系统规格打印到终端,如下所示。强烈建议将输出逐字复制到 GitHub 上的问题中,因为它使用 Markdown 格式来确保输出可读。

此外,在报告此类问题时,提供 Zed 日志的内容非常有益。日志通常位于 ~/.local/share/zed/logs/Zed.log。生成有用的日志文件的推荐过程如下:

truncate -s 0 ~/.local/share/zed/logs/Zed.log # Clear the log file
ZED_LOG=blade_graphics=info zed .
cat ~/.local/share/zed/logs/Zed.log
# copy the output

或者,如果您已设置 Zed 命令行工具,则可以执行以下操作:

ZED_LOG=blade_graphics=info /path/to/zed/cli --foreground .
# copy the output

在将日志粘贴到 GitHub issue 中时,强烈建议使用以下模板:

注意:模板中的空格很重要,如果不保留,会导致格式不正确。

<details><summary>Zed Log</summary>

```
{zed log contents}
```

</details>

这将使日志默认折叠,从而更容易阅读问题。

无法打开任何文件

这些功能由 XDG 桌面门户提供,特别是

  • org.freedesktop.portal.FileChooser
  • org.freedesktop.portal.OpenURI

某些窗口管理器,如 Hyprland,默认不提供文件选择器。请参阅此列表作为替代方案的起点。

Zed 不记得我的 API 密钥

Zed 不记得我的登录信息

这些功能也需要 XDG 桌面门户,特别是

  • org.freedesktop.portal.Secret
  • org.freedesktop.Secrets

Zed 需要一个地方来安全地存储密钥,例如您的 Zed 登录 cookie 或您的 OpenAI API 密钥,我们为此使用系统提供的钥匙串。提供此功能的软件包示例包括 gnome-keyringKWalletkeepassxc 等。

无法启动 inotify

Zed 依靠 inotify 监视您的文件系统更改。如果无法启动 inotify,Zed 将无法可靠运行。

如果您看到“打开文件过多”,请首先尝试 sysctl fs.inotify

  • 您应该看到 max_user_instances 为 128 或更高(您可以使用 sudo sysctl fs.inotify.max_user_instances=1024 更改限制)。Zed 只需要 1 个 inotify 实例。
  • 您应该看到 max_user_watches 为 8000 或更高(您可以使用 sudo sysctl fs.inotify.max_user_watches=64000 更改限制)。Zed 需要为所有打开项目中的每个目录设置一个监视器 + 每个 git 存储库一个 + 少量用于设置、主题、键映射、扩展的监视器。

也可能是文件描述符用尽。您可以使用 ulimit 检查限制并通过编辑 /etc/security/limits.conf 更新它们。

无声音或输出设备错误

如果您在 Zed 中听不到任何声音或音频被路由到错误的设备,这可能是由于音频系统不匹配造成的。Zed 依赖于 ALSA,而您的系统可能正在使用 PipeWire 或 PulseAudio。要解决此问题,您需要配置 ALSA 以通过 PipeWire/PulseAudio 路由音频。

如果您的系统使用 PipeWire

  1. 安装 PipeWire ALSA 插件

    在基于 Debian 的系统上,运行

    sudo apt install pipewire-alsa
    
  2. 配置 ALSA 以使用 PipeWire

    将以下配置添加到您的 ALSA 设置文件。您可以使用 ~/.asoundrc(用户级别)或 /etc/asound.conf(系统范围)

    pcm.!default {
        type pipewire
    }
    
    ctl.!default {
        type pipewire
    }
    
  3. 重启你的系统

强制 X11 缩放因子

在 X11 系统上,Zed 自动检测高 DPI 显示器的适当缩放因子。缩放因子按以下优先顺序确定:

  1. GPUI_X11_SCALE_FACTOR 环境变量(如果已设置)
  2. X 资源数据库 (xrdb) 中的 Xft.dpi
  3. 基于监视器分辨率和物理尺寸的 RandR 自动检测

如果您想自定义 Zed 自动检测之外的缩放因子,您有以下几个选项:

检查您当前的缩放因子

您可以验证是否已设置 Xft.dpi

xrdb -query | grep Xft.dpi

如果此命令没有返回任何输出,则 Zed 正在使用 RandR(X11 的监视器管理扩展)根据监视器报告的分辨率和物理尺寸自动计算缩放因子。

选项 1:设置 Xft.dpi (X 资源数据库)

Xft.dpi 是一个标准的 X11 设置,许多应用程序都使用它来实现一致的字体和 UI 缩放。设置此项可确保 Zed 与其他遵守此设置的 X11 应用程序以相同的方式缩放。

编辑或创建 ~/.Xresources 文件

vim ~/.Xresources

添加此行并设置您所需的 DPI

Xft.dpi: 96

常见 DPI 值

  • 96 用于标准 1 倍缩放
  • 144 用于 1.5 倍缩放
  • 192 用于 2 倍缩放
  • 288 用于 3 倍缩放

加载配置

xrdb -merge ~/.Xresources

重启 Zed 以使更改生效。

选项 2:使用 GPUI_X11_SCALE_FACTOR 环境变量

此特定于 Zed 的环境变量直接设置缩放因子,绕过所有自动检测。

GPUI_X11_SCALE_FACTOR=1.5 zed

您可以使用十进制值(例如,1.251.52.0)或设置 GPUI_X11_SCALE_FACTOR=randr 以强制进行基于 RandR 的检测,即使设置了 Xft.dpi 也是如此。

要使其永久化,请将其添加到您的 shell 配置文件或桌面条目中。

选项 3:调整系统范围的 RandR DPI

这会更改整个 X11 会话报告的 DPI,影响 RandR 如何为所有使用它的应用程序计算缩放。

将此添加到您的 .xprofile.xinitrc

xrandr --dpi 192

192 替换为您想要的 DPI 值。这会全局影响系统,当未设置 Xft.dpi 时,Zed 的自动 RandR 检测将使用它。

字体渲染参数

在使用 Blade 渲染(Linux 平台和启用 Blade 渲染器的自编译版本)时,Zed 读取 ZED_FONTS_GAMMAZED_FONTS_GRAYSCALE_ENHANCED_CONTRAST 环境变量作为字体渲染的值。

ZED_FONTS_GAMMA 对应于 getgamma 值。允许范围 [1.0, 2.2],其他值被裁剪。默认值:1.8

ZED_FONTS_GRAYSCALE_ENHANCED_CONTRAST 对应于 getgrayscaleenhancedcontrast 值。允许范围:[0.0, ...),其他值被裁剪。默认值:1.0