Jump to content

Niri/zh: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
Created page with "[$1 Niri] 是一个可滚动平铺的 Wayland 合成器。"
Tags: Mobile edit Mobile web edit
 
Ardenet (talk | contribs)
Created page with "在使用诸如 programs.waybar.enable 这样的配置选项时,waybar 在 Niri 上可能会启动两次。这是因为[$1 默认的 Niri 配置文件会在系统启动时自动启动 waybar]。请从该配置文件中移除 spawn-at-startup "waybar" 的设置,或者在不使用 home-manager 选项的情况下,将 waybar 添加到系统的软件包列表中。"
 
(22 intermediate revisions by 2 users not shown)
Line 18: Line 18:
[https://github.com/niri-wm/niri Niri] 是一个可滚动平铺的 [[Special:MyLanguage/Wayland|Wayland]] 合成器。
[https://github.com/niri-wm/niri Niri] 是一个可滚动平铺的 [[Special:MyLanguage/Wayland|Wayland]] 合成器。


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Installation"></span>
== Installation ==
== 安装 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
只需启用 {{nixos:option|programs.niri}}:
Simply enable {{nixos:option|programs.niri}}:
</div>


{{file|/etc/nixos/configuration.nix|nix|3=
{{file|/etc/nixos/configuration.nix|nix|3=
Line 30: Line 27:
}}
}}


{{Note|<span lang="en" dir="ltr" class="mw-content-ltr">Niri can be enabled <strong>without installing a custom flake</strong> such as [https://github.com/sodiboo/niri-flake niri-flake]. {{ic|niri-flake}} is only necessary if you would like to use a very recent version of Niri or if you would want to write configurations in the Nix language, although as of 2025 this repository is listed near the top in search engines.</span>}}
{{Note|<strong>无需安装自定义 flake</strong>(例如 [https://github.com/sodiboo/niri-flake niri-flake])即可启用 Niri。尽管截至 2025 年,该存储库在搜索引擎中的排名仍然靠前,但只有当您想要使用最新版本的 Niri 或想要用 Nix 语言编写配置时,才需要 {{ic|niri-flake}}。}}




{{Warning|<span lang="en" dir="ltr" class="mw-content-ltr">Without [[#Configuration|Configuration]] or [[#Additional Setup|Additional Setup]], or after a fresh installation, you may be unable to launch apps due to missing expected programs such as Alacritty and fuzzel. Press <kbd>Super</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> to exit niri and proceed to one of them.</span>}}
{{Warning|如果没有进行 [[#Configuration|配置]] 或 [[#Additional Setup|附加设置]],或者在全新安装后,您可能由于缺少 Alacritty 和 fuzzel 等预期程序而无法启动应用程序。请按 <kbd>Super</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> 退出 niri 并继续执行其中一项操作。}}




<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Configuration"></span>
== Configuration ==
== 配置 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
niri 的配置路径为 {{ic|$XDG_CONFIG_HOME/niri/config.kdl}}。因此,可以使用 [[Special:MyLanguage/Home Manager|Home Manager]] 进行配置:
The configuration path for niri is {{ic|$XDG_CONFIG_HOME/niri/config.kdl}}. Therefore [[Special:MyLanguage/Home Manager|Home Manager]] can be used for configuration:
</div>


{{file|~/.config/home-manager/home.nix|nix|3=
{{file|~/.config/home-manager/home.nix|nix|3=
xdg.configFile."niri/config.kdl".source = ./config.kdl;
xdg.configFile."niri/config.kdl".source = ./config.kdl;
}}
}}
如果您希望在构建过程中对配置进行验证,可以使用 {{ic|pkgs.runCommand}},用法如下:


<div lang="en" dir="ltr" class="mw-content-ltr">
{{file|~/.config/home-manager/home.nix|nix|3=
You might want to start from [https://github.com/niri-wm/niri/blob/main/resources/default-config.kdl the default configuration file] described at [https://github.com/niri-wm/niri/wiki/Getting-Started#main-default-hotkeys here].
xdg.configFile."niri/config.kdl".source =
</div>
  pkgs.runCommand "niri-config-checked"
    {
      nativeBuildInputs = [ pkgs.niri ];
    }
    ''
      niri validate --config ${./config.kdl}
      cp ${./config.kdl} $out
    '';
}}
 
 
您可能想从[https://github.com/niri-wm/niri/blob/main/resources/default-config.kdl 默认配置文件]开始,如[https://github.com/niri-wm/niri/wiki/Getting-Started#main-default-hotkeys 这里]所述。


<div lang="en" dir="ltr" class="mw-content-ltr">
有关 niri 的配置选项,请参阅 [https://niri-wm.github.io/niri/ 此 wiki]。
See [https://niri-wm.github.io/niri/ the wiki] for configuration options for niri.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
=== Greetd ===
=== Greetd ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
您可以使用 greeted 配置启动 niri:
You can start niri with greetd configuration:
</div>


{{file|/etc/nixos/configuration.nix|nix|3=
{{file|/etc/nixos/configuration.nix|nix|3=
Line 84: Line 84:
}}
}}


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Additional_Setup"></span>
== Additional Setup ==
== 额外设置 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
如[https://github.com/niri-wm/niri/wiki/Example-systemd-Setup 示例 systemd 设置 (niri wiki)]中所述,您可能需要设置一些额外的服务,包括以下的 [[Special:MyLanguage/Swayidle|Swayidle]]、[[Special:MyLanguage/Swaylock|Swaylock]]、[[Special:MyLanguage/Waybar|Waybar]]、[[Special:MyLanguage/Polkit|Polkit]] 和 [[Special:MyLanguage/Secret Service|Secret Service]],以补充常规窗口管理器的功能。其中一些设置也是启用[https://github.com/niri-wm/niri/blob/main/resources/default-config.kdl 默认配置文件]所有功能所必需的。
As described in [https://github.com/niri-wm/niri/wiki/Example-systemd-Setup Example systemd Setup (niri wiki)], you might want to set up some additional services including [[Special:MyLanguage/Swayidle|Swayidle]], [[Special:MyLanguage/Swaylock|Swaylock]], [[Special:MyLanguage/Waybar|Waybar]], [[Special:MyLanguage/Polkit|Polkit]] and [[Special:MyLanguage/Secret Service|Secret Service]] as follows to complement the functionality of a regular window manager. Some of the these settings are also required to enable all the features of [https://github.com/niri-wm/niri/blob/main/resources/default-config.kdl the default configuration file].
</div>


{{file|3=
{{file|3=
Line 101: Line 98:
|name=/etc/nixos/configuration.nix|lang=nix}}
|name=/etc/nixos/configuration.nix|lang=nix}}


<div lang="en" dir="ltr" class="mw-content-ltr">
或者使用 [[Special:MyLanguage/Home Manager|Home Manager]]:
Or using [[Special:MyLanguage/Home Manager|Home Manager]]:
</div>


{{file|~/.config/home-manager/home.nix|nix|3=
{{file|~/.config/home-manager/home.nix|nix|3=
Line 118: Line 113:
|name=~/.config/home-manager/home.nix|lang=nix}}
|name=~/.config/home-manager/home.nix|lang=nix}}


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Troubleshooting"></span>
== Troubleshooting ==
== 故障排除 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="IME_not_working_on_Electron_apps"></span>
=== IME not working on Electron apps ===
=== IME 在 Electron 应用中无法正常工作 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
有一种通用的解决方法,即按照[[Special:MyLanguage/Wayland#Electron_and_Chromium|Wayland#Electron_and_Chromium]]中的说明设置{{ic|NIXOS_OZONE_WL}}:
There is a general workaround to set {{ic|NIXOS_OZONE_WL}} as described in [[Special:MyLanguage/Wayland#Electron_and_Chromium|Wayland#Electron_and_Chromium]]:
</div>


{{file|/etc/nixos/configuration.nix|nix|3=
{{file|/etc/nixos/configuration.nix|nix|3=
Line 134: Line 125:
}}
}}


<div lang="en" dir="ltr" class="mw-content-ltr">
然而,由于 niri 不支持 text-input-v1,有时需要通过手动添加 {{ic|<nowiki>--wayland-text-input-version=3</nowiki>}} 标志来启用 text-input-v3,IME 才能正常工作:
However, since niri does not support text-input-v1, sometimes enabling text-input-v3 by manually adding {{ic|<nowiki>--wayland-text-input-version=3</nowiki>}} flag is necessary for IME to work:
</div>


<syntaxhighlight lang=console>
<syntaxhighlight lang=console>
Line 142: Line 131:
</syntaxhighlight>
</syntaxhighlight>


<div lang="en" dir="ltr" class="mw-content-ltr">
<code>wrapProgram</code> 可用于自动添加该标志:
<code>wrapProgram</code> may be used to add the flag automatically:
</div>


{{file|/etc/nixos/configuration.nix|nix|3=
{{file|/etc/nixos/configuration.nix|nix|3=
Line 156: Line 143:
];}}
];}}


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="XWayland_apps_not_working"></span>
=== XWayland apps not working ===
=== XWayland 应用无法正常工作 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Niri 有一个可选依赖,强烈建议安装(您可阅读 [https://github.com/niri-wm/niri/wiki/Xwayland 这篇文章] 以了解更多相关信息)。
There is a optional dependency for niri which is highly recommended to install (you can read [https://github.com/niri-wm/niri/wiki/Xwayland this] article to learn more about this)
</div>


{{File|3=environment.systemPackages = with pkgs; [  
{{File|3=environment.systemPackages = with pkgs; [  
Line 168: Line 152:
];|name=/etc/nixos/configuration.nix|lang=nix}}
];|name=/etc/nixos/configuration.nix|lang=nix}}


<div lang="en" dir="ltr" class="mw-content-ltr">
或者使用 [[Special:MyLanguage/Home Manager|Home Manager]]
Or using [[Special:MyLanguage/Home Manager|Home Manager]]
</div>


{{File|3=home.packages = with pkgs; [
{{File|3=home.packages = with pkgs; [
Line 176: Line 158:
];|name=~/.config/home-manager/home.nix|lang=nix}}
];|name=~/.config/home-manager/home.nix|lang=nix}}


<div lang="en" dir="ltr" class="mw-content-ltr">
安装 {{ic|xwayland-satellite}} 后,niri 将会将其无缝集成,您的所有 XWayland 应用都将正常运行。
After you installed {{ic|xwayland-satellite}} niri will integrate it out of the box and all of your XWayland apps will function properly.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="File_picker_not_working"></span>
=== File picker not working ===
=== 文件选择器无法正常工作 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
如果您正在使用 <code>xdg-desktop-portal-gnome</code>,它会尝试将 Nautilus 用作文件选择器,但如果未安装 Nautilus,则会失败。
If you are using <code>xdg-desktop-portal-gnome</code>, it will attempt to use Nautilus as the file picker, which will fail if Nautilus is not installed.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
为解决此问题,您可以改为强制使用 GTK 或 KDE 的文件选择器门户:
To work around this problem, you can force usage of the gtk or kde portals for file picker instead:
</div>


{{File|3=xdg.portal.config.niri = {
{{File|3=xdg.portal.config.niri = {
Line 196: Line 171:
};|name=/etc/nixos/configuration.nix|lang=nix}}
};|name=/etc/nixos/configuration.nix|lang=nix}}


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Waybar_launches_twice"></span>
=== Waybar launches twice ===
=== Waybar 启动两次 ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
在使用诸如 programs.waybar.enable 这样的配置选项时,waybar 在 Niri 上可能会启动两次。这是因为[https://github.com/niri-wm/niri/blob/b07bde3ee82dd73115e6b949e4f3f63695da35ea/resources/default-config.kdl#L271 默认的 Niri 配置文件会在系统启动时自动启动 waybar]。请从该配置文件中移除 spawn-at-startup "waybar" 的设置,或者在不使用 home-manager 选项的情况下,将 waybar 添加到系统的软件包列表中。
When using a configuration option like programs.waybar.enable, waybar may launch twice on Niri. This is because the [https://github.com/niri-wm/niri/blob/b07bde3ee82dd73115e6b949e4f3f63695da35ea/resources/default-config.kdl#L271 default Niri config file launches waybar on launch]. Remove the spawn-at-startup "waybar" from the config file, or add waybar to your systems packages without using the home-manager option.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="See_Also"></span>
== See Also ==
== 另见 ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
* [[Special:MyLanguage/Wayland|Wayland]]
* [[Special:MyLanguage/Wayland|Wayland]]
* [[Special:MyLanguage/Sway|Sway]]
* [[Special:MyLanguage/Sway|Sway]]
* [[Special:MyLanguage/Wallpapers for Wayland|Wallpapers for Wayland]]
* [[Special:MyLanguage/Wallpapers for Wayland|用于 Wayland 的壁纸]]
* [https://github.com/sodiboo/niri-flake/ niri-flake]
* [https://github.com/sodiboo/niri-flake/ niri-flake]
</div>


[[Category:Window managers]]
[[Category:Window managers]]
[[Category:Applications{{#translation:}}]]
[[Category:Applications{{#translation:}}]]

Latest revision as of 16:19, 4 August 2026

警告:显示标题“niri”覆盖了之前的显示标题“Niri”。

niri

Wayland compositor Application

100%
Initial release2023-11-26
Latest release26.04; 25 Apr 2026
StatusActive
Operating SystemLinux, FreeBSD
Language(s)Rust, GLSL
LicenseGNU General Public License v3.0 only
External links
GitHubniri-wm/niri
Bug trackerhttps://github.com/niri-wm/niri/issues
DocumentationOfficial wiki, niri-flake

Niri 是一个可滚动平铺的 Wayland 合成器。

安装

只需启用 programs.niri:

❄︎ /etc/nixos/configuration.nix
programs.niri.enable = true;
Note: 无需安装自定义 flake(例如 niri-flake)即可启用 Niri。尽管截至 2025 年,该存储库在搜索引擎中的排名仍然靠前,但只有当您想要使用最新版本的 Niri 或想要用 Nix 语言编写配置时,才需要 niri-flake。


⚠︎
Warning: 如果没有进行 配置 或 附加设置,或者在全新安装后,您可能由于缺少 Alacritty 和 fuzzel 等预期程序而无法启动应用程序。请按 Super+Shift+E 退出 niri 并继续执行其中一项操作。


配置

niri 的配置路径为 $XDG_CONFIG_HOME/niri/config.kdl。因此,可以使用 Home Manager 进行配置:

❄︎ ~/.config/home-manager/home.nix
xdg.configFile."niri/config.kdl".source = ./config.kdl;

如果您希望在构建过程中对配置进行验证,可以使用 pkgs.runCommand,用法如下:

❄︎ ~/.config/home-manager/home.nix
xdg.configFile."niri/config.kdl".source =
  pkgs.runCommand "niri-config-checked"
    {
      nativeBuildInputs = [ pkgs.niri ];
    }
    ''
      niri validate --config ${./config.kdl}
      cp ${./config.kdl} $out
    '';


您可能想从默认配置文件开始,如这里所述。

有关 niri 的配置选项,请参阅 此 wiki。

Greetd

您可以使用 greeted 配置启动 niri:

❄︎ /etc/nixos/configuration.nix
programs.niri.enable = true;

services.greetd = {
  enable = true;
  settings = {
    default_session = {
      command = "${config.programs.niri.package}/bin/niri-session";
      user = "myuser";
    };
  };
};

# NixOS otherwise injects a stripped PATH via Environment= on the niri.service
# unit which shadows the imported user-manager PATH. Disabling the default
# lets niri inherit the full PATH set up by niri-session.
systemd.user.services.niri.enableDefaultPath = false;

额外设置

如示例 systemd 设置 (niri wiki)中所述,您可能需要设置一些额外的服务,包括以下的 Swayidle、Swaylock、Waybar、Polkit 和 Secret Service,以补充常规窗口管理器的功能。其中一些设置也是启用默认配置文件所有功能所必需的。

❄︎ /etc/nixos/configuration.nix
security.polkit.enable = true; # polkit
services.gnome.gnome-keyring.enable = true; # secret service
security.pam.services.swaylock = {};

programs.waybar.enable = true; # top bar
environment.systemPackages = with pkgs; [ alacritty fuzzel swaylock mako swayidle ];

或者使用 Home Manager:

❄︎ ~/.config/home-manager/home.nix
programs.alacritty.enable = true; # Super+T in the default setting (terminal)
programs.fuzzel.enable = true; # Super+D in the default setting (app launcher)
programs.swaylock.enable = true; # Super+Alt+L in the default setting (screen locker)
programs.waybar.enable = true; # launch on startup in the default setting (bar)
services.mako.enable = true; # notification daemon
services.swayidle.enable = true; # idle management daemon
services.polkit-gnome.enable = true; # polkit
home.packages = with pkgs; [
  swaybg # wallpaper
];

故障排除

IME 在 Electron 应用中无法正常工作

有一种通用的解决方法,即按照Wayland#Electron_and_Chromium中的说明设置NIXOS_OZONE_WL:

❄︎ /etc/nixos/configuration.nix
environment.sessionVariables.NIXOS_OZONE_WL = "1";

然而,由于 niri 不支持 text-input-v1,有时需要通过手动添加 --wayland-text-input-version=3 标志来启用 text-input-v3,IME 才能正常工作:

$ slack --wayland-text-input-version=3

wrapProgram 可用于自动添加该标志:

❄︎ /etc/nixos/configuration.nix
environment.systemPackages = [
  (pkgs.symlinkJoin {
    pname = pkgs.vscode.pname;
    paths = [ pkgs.vscode ];
    buildInputs = [ pkgs.makeWrapper ];
    postBuild = "wrapProgram $out/bin/code --add-flags --wayland-text-input-version=3";
  };)
];

XWayland 应用无法正常工作

Niri 有一个可选依赖,强烈建议安装(您可阅读 这篇文章 以了解更多相关信息)。

❄︎ /etc/nixos/configuration.nix
environment.systemPackages = with pkgs; [ 
    xwayland-satellite # xwayland support
];

或者使用 Home Manager

❄︎ ~/.config/home-manager/home.nix
home.packages = with pkgs; [
  xwayland-satellite # xwayland support
];

安装 xwayland-satellite 后,niri 将会将其无缝集成,您的所有 XWayland 应用都将正常运行。

文件选择器无法正常工作

如果您正在使用 xdg-desktop-portal-gnome,它会尝试将 Nautilus 用作文件选择器,但如果未安装 Nautilus,则会失败。

为解决此问题,您可以改为强制使用 GTK 或 KDE 的文件选择器门户:

❄︎ /etc/nixos/configuration.nix
xdg.portal.config.niri = {
  "org.freedesktop.impl.portal.FileChooser" = [ "gtk" ]; # or "kde"
};

Waybar 启动两次

在使用诸如 programs.waybar.enable 这样的配置选项时,waybar 在 Niri 上可能会启动两次。这是因为默认的 Niri 配置文件会在系统启动时自动启动 waybar。请从该配置文件中移除 spawn-at-startup "waybar" 的设置,或者在不使用 home-manager 选项的情况下,将 waybar 添加到系统的软件包列表中。

另见