linux.md

  1# Zed on Linux
  2
  3## Standard Installation
  4
  5For most people we recommend using the script on the [download](https://zed.dev/download) page to install Zed:
  6
  7```sh
  8curl -f https://zed.dev/install.sh | sh
  9```
 10
 11We also offer a preview build of Zed which receives updates about a week ahead of stable. You can install it with:
 12
 13```sh
 14curl -f https://zed.dev/install.sh | ZED_CHANNEL=preview sh
 15```
 16
 17The Zed installed by the script works best on systems that:
 18
 19- have a Vulkan compatible GPU available (for example Linux on an M-series macBook)
 20- have a system-wide glibc (NixOS and Alpine do not by default)
 21  - x86_64 (Intel/AMD): glibc version >= 2.31 (Ubuntu 20 and newer)
 22  - aarch64 (ARM): glibc version >= 2.35 (Ubuntu 22 and newer)
 23
 24Both Nix and Alpine have third-party Zed packages available (though they are currently a few weeks out of date). If you'd like to use our builds they do work if you install a glibc compatibility layer. On NixOS you can try [nix-ld](https://github.com/Mic92/nix-ld), and on Alpine [gcompat](https://wiki.alpinelinux.org/wiki/Running_glibc_programs).
 25
 26You will need to build from source for:
 27
 28- architectures other than 64-bit Intel or 64-bit ARM (for example a 32-bit or RISC-V machine)
 29- Redhat Enterprise Linux 8.x, Rocky Linux 8, AlmaLinux 8, Amazon Linux 2 on all architectures
 30- Redhat Enterprise Linux 9.x, Rocky Linux 9.3, AlmaLinux 8, Amazon Linux 2023 on aarch64 (x86_x64 OK)
 31
 32## Other ways to install Zed on Linux
 33
 34Zed is open source, and [you can install from source](./development/linux.md).
 35
 36### Installing via a package manager
 37
 38There are several third-party Zed packages for various Linux distributions and package managers, sometimes under `zed-editor`. You may be able to install Zed using these packages:
 39
 40- Flathub: [`dev.zed.Zed`](https://flathub.org/apps/dev.zed.Zed)
 41- Arch: [`zed`](https://archlinux.org/packages/extra/x86_64/zed/)
 42- Arch (AUR): [`zed-git`](https://aur.archlinux.org/packages/zed-git), [`zed-preview`](https://aur.archlinux.org/packages/zed-preview), [`zed-preview-bin`](https://aur.archlinux.org/packages/zed-preview-bin)
 43- Alpine: `zed` ([aarch64](https://pkgs.alpinelinux.org/package/edge/testing/aarch64/zed)) ([x86_64](https://pkgs.alpinelinux.org/package/edge/testing/x86_64/zed))
 44- Conda: [`zed`](https://anaconda.org/conda-forge/zed)
 45- Nix: `zed-editor` ([unstable](https://search.nixos.org/packages?channel=unstable&show=zed-editor))
 46- Fedora/Ultramarine (Terra): [`zed`](https://github.com/terrapkg/packages/tree/frawhide/anda/devs/zed/stable), [`zed-preview`](https://github.com/terrapkg/packages/tree/frawhide/anda/devs/zed/preview), [`zed-nightly`](https://github.com/terrapkg/packages/tree/frawhide/anda/devs/zed/nightly)
 47- Solus: [`zed`](https://github.com/getsolus/packages/tree/main/packages/z/zed)
 48- Parabola: [`zed`](https://www.parabola.nu/packages/extra/x86_64/zed/)
 49- Manjaro: [`zed`](https://packages.manjaro.org/?query=zed)
 50- ALT Linux (Sisyphus): [`zed`](https://packages.altlinux.org/en/sisyphus/srpms/zed/)
 51- AOSC OS: [`zed`](https://packages.aosc.io/packages/zed)
 52
 53See [Repology](https://repology.org/project/zed-editor/versions) for a list of Zed packages in various repositories.
 54
 55### Community
 56
 57When installing a third-party package please be aware that it may not be completely up to date and may be slightly different from the Zed we package (a common change is to rename the binary to `zedit` or `zeditor` to avoid conflicting with other packages).
 58
 59We'd love your help making Zed available for everyone. If Zed is not yet available for your package manager, and you would like to fix that, we have some notes on [how to do it](./development/linux.md#notes-for-packaging-zed).
 60
 61The packages in this section provide binary installs for Zed but are not official packages within the associated distributions. These packages are maintained by community members and as such a higher level of caution should be taken when installing them.
 62
 63#### Debian
 64
 65Zed is available in [this community-maintained repository](https://debian.griffo.io/).
 66
 67Instructions for each version are available in the README of the repository where packages are built.
 68Build, packaging and instructions for each version are available in the README of the [repository](https://github.com/dariogriffo/zed-debian)
 69
 70### Downloading manually
 71
 72If you'd prefer, you can install Zed by downloading our pre-built .tar.gz. This is the same artifact that our install script uses, but you can customize the location of your installation by modifying the instructions below:
 73
 74Download the `.tar.gz` file:
 75
 76- [zed-linux-x86_64.tar.gz](https://cloud.zed.dev/releases/stable/latest/download?asset=zed&arch=x86_64&os=linux&source=docs)
 77  ([preview](https://cloud.zed.dev/releases/preview/latest/download?asset=zed&arch=x86_64&os=linux&source=docs))
 78- [zed-linux-aarch64.tar.gz](https://cloud.zed.dev/releases/stable/latest/download?asset=zed&arch=aarch64&os=linux&source=docs)
 79  ([preview](https://cloud.zed.dev/releases/preview/latest/download?asset=zed&arch=aarch64&os=linux&source=docs))
 80
 81Then ensure that the `zed` binary in the tarball is on your path. The easiest way is to unpack the tarball and create a symlink:
 82
 83```sh
 84mkdir -p ~/.local
 85# extract zed to ~/.local/zed.app/
 86tar -xvf <path/to/download>.tar.gz -C ~/.local
 87# link the zed binary to ~/.local/bin (or another directory in your $PATH)
 88ln -sf ~/.local/zed.app/bin/zed ~/.local/bin/zed
 89```
 90
 91If you'd like integration with an XDG-compatible desktop environment, you will also need to install the `.desktop` file:
 92
 93```sh
 94cp ~/.local/zed.app/share/applications/zed.desktop ~/.local/share/applications/dev.zed.Zed.desktop
 95sed -i "s|Icon=zed|Icon=$HOME/.local/zed.app/share/icons/hicolor/512x512/apps/zed.png|g" ~/.local/share/applications/dev.zed.Zed.desktop
 96sed -i "s|Exec=zed|Exec=$HOME/.local/zed.app/libexec/zed-editor|g" ~/.local/share/applications/dev.zed.Zed.desktop
 97```
 98
 99## Uninstalling Zed
100
101### Standard Uninstall
102
103If Zed was installed using the default installation script, it can be uninstalled by supplying the `--uninstall` flag to the `zed` shell command
104
105```sh
106zed --uninstall
107```
108
109If there are no errors, the shell will then prompt you whether you'd like to keep your preferences or delete them. After making a choice, you should see a message that Zed was successfully uninstalled.
110
111In the case that the `zed` shell command was not found in your PATH, you can try one of the following commands
112
113```sh
114$HOME/.local/bin/zed --uninstall
115```
116
117or
118
119```sh
120$HOME/.local/zed.app/bin.zed --uninstall
121```
122
123The first case might fail if a symlink was not properly established between `$HOME/.local/bin/zed` and `$HOME/.local/zed.app/bin.zed`. But the second case should work as long as Zed was installed to its default location.
124
125If Zed was installed to a different location, you must invoke the `zed` binary stored in that installation directory and pass the `--uninstall` flag to it in the same format as the previous commands.
126
127### Package Manager
128
129If Zed was installed using a package manager, please consult the documentation for that package manager on how to uninstall a package.
130
131## Troubleshooting
132
133Linux works on a large variety of systems configured in many different ways. We primarily test Zed on a vanilla Ubuntu setup, as it is the most common distribution our users use, that said we do expect it to work on a wide variety of machines.
134
135### Zed fails to start
136
137If you see an error like "/lib64/libc.so.6: version 'GLIBC_2.29' not found" it means that your distribution's version of glibc is too old. You can either upgrade your system, or [install Zed from source](./development/linux.md).
138
139### Graphics issues
140
141#### Zed fails to open windows
142
143Zed requires a GPU to run effectively. Under the hood, we use [Vulkan](https://www.vulkan.org/) to communicate with your GPU. If you are seeing problems with performance, or Zed fails to load, it is possible that Vulkan is the culprit.
144
145If you see a notification saying `Zed failed to open a window: NoSupportedDeviceFound` this means that Vulkan cannot find a compatible GPU. you can try running [vkcube](https://github.com/krh/vkcube) (usually available as part of the `vulkaninfo` or `vulkan-tools` package on various distributions) to try to troubleshoot where the issue is coming from like so:
146
147```
148vkcube
149```
150
151> **_Note_**: Try running in both X11 and wayland modes by running `vkcube -m [x11|wayland]`. Some versions of `vkcube` use `vkcube` to run in X11 and `vkcube-wayland` to run in wayland.
152
153This should output a line describing your current graphics setup and show a rotating cube. If this does not work, you should be able to fix it by installing Vulkan compatible GPU drivers, however in some cases there is no Vulkan support yet.
154
155You can find out which graphics card Zed is using by looking in the Zed log (`~/.local/share/zed/logs/Zed.log`) for `Using GPU: ...`.
156
157If you see errors like `ERROR_INITIALIZATION_FAILED` or `GPU Crashed` or `ERROR_SURFACE_LOST_KHR` then you may be able to work around this by installing different drivers for your GPU, or by selecting a different GPU to run on. (See [#14225](https://github.com/zed-industries/zed/issues/14225))
158
159On some systems the file `/etc/prime-discrete` can be used to enforce the use of a discrete GPU using [PRIME](https://wiki.archlinux.org/title/PRIME). Depending on the details of your setup, you may need to change the contents of this file to "on" (to force discrete graphics) or "off" (to force integrated graphics).
160
161On others, you may be able to the environment variable `DRI_PRIME=1` when running Zed to force the use of the discrete GPU.
162
163If you're using an AMD GPU and Zed crashes when selecting long lines, try setting the `ZED_PATH_SAMPLE_COUNT=0` environment variable. (See [#26143](https://github.com/zed-industries/zed/issues/26143))
164
165If you're using an AMD GPU, you might get a 'Broken Pipe' error. Try using the RADV or Mesa drivers. (See [#13880](https://github.com/zed-industries/zed/issues/13880))
166
167If you are using `amdvlk`, the default open-source AMD graphics driver, you may find that Zed consistently fails to launch. This is a known issue for some users, for example on Omarchy (see issue [#28851](https://github.com/zed-industries/zed/issues/28851)). To fix this, you will need to use a different driver. We recommend removing the `amdvlk` and `lib32-amdvlk` packages and installing `vulkan-radeon` instead (see issue [#14141](https://github.com/zed-industries/zed/issues/14141)).
168
169For more information, the [Arch guide to Vulkan](https://wiki.archlinux.org/title/Vulkan) has some good steps that translate well to most distributions.
170
171#### Forcing Zed to use a specific GPU
172
173There are a few different ways to force Zed to use a specific GPU:
174
175##### Option A
176
177You can use the `ZED_DEVICE_ID={device_id}` environment variable to specify the device ID of the GPU you wish to have Zed use.
178
179You can obtain the device ID of your GPU by running `lspci -nn | grep VGA` which will output each GPU on one line like:
180
181```
18208:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3070] [10de:2484] (rev a1)
183```
184
185where the device ID here is `2484`. This value is in hexadecimal, so to force Zed to use this specific GPU you would set the environment variable like so:
186
187```
188ZED_DEVICE_ID=0x2484 zed
189```
190
191Make sure to export the variable if you choose to define it globally in a `.bashrc` or similar.
192
193##### Option B
194
195If you are using Mesa, you can run `MESA_VK_DEVICE_SELECT=list zed --foreground` to get a list of available GPUs and then export `MESA_VK_DEVICE_SELECT=xxxx:yyyy` to choose a specific device. Furthermore, you can fallback to xwayland with an additional export of `WAYLAND_DISPLAY=""`.
196
197##### Option C
198
199Using [vkdevicechooser](https://github.com/jiriks74/vkdevicechooser).
200
201#### Reporting graphics issues
202
203If Vulkan is configured correctly, and Zed is still not working for you, please [file an issue](https://github.com/zed-industries/zed) with as much information as possible.
204
205When reporting issues where Zed fails to start due to graphics initialization errors on GitHub, it can be impossible to run the `zed: copy system specs into clipboard` command like we instruct you to in our issue template. We provide an alternative way to collect the system specs specifically for this situation.
206
207Passing the `--system-specs` flag to Zed like
208
209```sh
210zed --system-specs
211```
212
213will print the system specs to the terminal like so. It is strongly recommended to copy the output verbatim into the issue on GitHub, as it uses markdown formatting to ensure the output is readable.
214
215Additionally, it is extremely beneficial to provide the contents of your Zed log when reporting such issues. The log is usually located at `~/.local/share/zed/logs/Zed.log`. The recommended process for producing a helpful log file is as follows:
216
217```sh
218truncate -s 0 ~/.local/share/zed/logs/Zed.log # Clear the log file
219ZED_LOG=blade_graphics=info zed .
220cat ~/.local/share/zed/logs/Zed.log
221# copy the output
222```
223
224Or, if you have the Zed cli setup, you can do
225
226```sh
227ZED_LOG=blade_graphics=info /path/to/zed/cli --foreground .
228# copy the output
229```
230
231It is also highly recommended when pasting the log into a github issue, to do so with the following template:
232
233> **_Note_**: The whitespace in the template is important, and will cause incorrect formatting if not preserved.
234
235````
236<details><summary>Zed Log</summary>
237
238```
239{zed log contents}
240```
241
242</details>
243````
244
245This will cause the logs to be collapsed by default, making it easier to read the issue.
246
247### I can't open any files
248
249### Clicking links isn't working
250
251These features are provided by XDG desktop portals, specifically:
252
253- `org.freedesktop.portal.FileChooser`
254- `org.freedesktop.portal.OpenURI`
255
256Some window managers, such as `Hyprland`, don't provide a file picker by default. See [this list](https://wiki.archlinux.org/title/XDG_Desktop_Portal#List_of_backends_and_interfaces) as a starting point for alternatives.
257
258### Zed isn't remembering my API keys
259
260### Zed isn't remembering my login
261
262These feature also requires XDG desktop portals, specifically:
263
264- `org.freedesktop.portal.Secret` or
265- `org.freedesktop.Secrets`
266
267Zed needs a place to securely store secrets such as your Zed login cookie or your OpenAI API Keys and we use a system provided keychain to do this. Examples of packages that provide this are `gnome-keyring`, `KWallet` and `keepassxc` among others.
268
269### Could not start inotify
270
271Zed relies on inotify to watch your filesystem for changes. If you cannot start inotify then Zed will not work reliably.
272
273If you are seeing "too many open files" then first try `sysctl fs.inotify`.
274
275- You should see that max_user_instances is 128 or higher (you can change the limit with `sudo sysctl fs.inotify.max_user_instances=1024`). Zed needs only 1 inotify instance.
276- You should see that `max_user_watches` is 8000 or higher (you can change the limit with `sudo sysctl fs.inotify.max_user_watches=64000`). Zed needs one watch per directory in all your open projects + one per git repository + a handful more for settings, themes, keymaps, extensions.
277
278It is also possible that you are running out of file descriptors. You can check the limits with `ulimit` and update them by editing `/etc/security/limits.conf`.
279
280### No sound or wrong output device
281
282If you're not hearing any sound in Zed or the audio is routed to the wrong device, it could be due to a mismatch between audio systems. Zed relies on ALSA, while your system may be using PipeWire or PulseAudio. To resolve this, you need to configure ALSA to route audio through PipeWire/PulseAudio.
283
284If your system uses PipeWire:
285
2861. **Install the PipeWire ALSA plugin**
287
288   On Debian-based systems, run:
289
290   ```bash
291   sudo apt install pipewire-alsa
292   ```
293
2942. **Configure ALSA to use PipeWire**
295
296   Add the following configuration to your ALSA settings file. You can use either `~/.asoundrc` (user-level) or `/etc/asound.conf` (system-wide):
297
298   ```bash
299   pcm.!default {
300       type pipewire
301   }
302
303   ctl.!default {
304       type pipewire
305   }
306   ```
307
3083. **Restart your system**
309
310### Forcing X11 scale factor
311
312On X11 systems, Zed automatically detects the appropriate scale factor for high-DPI displays. The scale factor is determined using the following priority order:
313
3141. `GPUI_X11_SCALE_FACTOR` environment variable (if set)
3152. `Xft.dpi` from X resources database (xrdb)
3163. Automatic detection via RandR based on monitor resolution and physical size
317
318If you want to customize the scale factor beyond what Zed detects automatically, you have several options:
319
320#### Check your current scale factor
321
322You can verify if you have `Xft.dpi` set:
323
324```sh
325xrdb -query | grep Xft.dpi
326```
327
328If this command returns no output, Zed is using RandR (X11's monitor management extension) to automatically calculate the scale factor based on your monitor's reported resolution and physical dimensions.
329
330#### Option 1: Set Xft.dpi (X Resources Database)
331
332`Xft.dpi` is a standard X11 setting that many applications use for consistent font and UI scaling. Setting this ensures Zed scales the same way as other X11 applications that respect this setting.
333
334Edit or create the `~/.Xresources` file:
335
336```sh
337vim ~/.Xresources
338```
339
340Add this line with your desired DPI:
341
342```sh
343Xft.dpi: 96
344```
345
346Common DPI values:
347
348- `96` for standard 1x scaling
349- `144` for 1.5x scaling
350- `192` for 2x scaling
351- `288` for 3x scaling
352
353Load the configuration:
354
355```sh
356xrdb -merge ~/.Xresources
357```
358
359Restart Zed for the changes to take effect.
360
361#### Option 2: Use the GPUI_X11_SCALE_FACTOR environment variable
362
363This Zed-specific environment variable directly sets the scale factor, bypassing all automatic detection.
364
365```sh
366GPUI_X11_SCALE_FACTOR=1.5 zed
367```
368
369You can use decimal values (e.g., `1.25`, `1.5`, `2.0`) or set `GPUI_X11_SCALE_FACTOR=randr` to force RandR-based detection even when `Xft.dpi` is set.
370
371To make this permanent, add it to your shell profile or desktop entry.
372
373#### Option 3: Adjust system-wide RandR DPI
374
375This changes the reported DPI for your entire X11 session, affecting how RandR calculates scaling for all applications that use it.
376
377Add this to your `.xprofile` or `.xinitrc`:
378
379```sh
380xrandr --dpi 192
381```
382
383Replace `192` with your desired DPI value. This affects the system globally and will be used by Zed's automatic RandR detection when `Xft.dpi` is not set.
384
385### Font rendering parameters
386
387When using Blade rendering (Linux platforms and self-compiled builds with the Blade renderer enabled), Zed reads `ZED_FONTS_GAMMA` and `ZED_FONTS_GRAYSCALE_ENHANCED_CONTRAST` environment variables for the values to use for font rendering.
388
389`ZED_FONTS_GAMMA` corresponds to [getgamma](https://learn.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwriterenderingparams-getgamma) values.
390Allowed range [1.0, 2.2], other values are clipped.
391Default: 1.8
392
393`ZED_FONTS_GRAYSCALE_ENHANCED_CONTRAST` corresponds to [getgrayscaleenhancedcontrast](https://learn.microsoft.com/en-us/windows/win32/api/dwrite_1/nf-dwrite_1-idwriterenderingparams1-getgrayscaleenhancedcontrast) values.
394Allowed range: [0.0, ..), other values are clipped.
395Default: 1.0