Jump to content

Niri/zh: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
Created page with "== 配置 =="
Ardenet (talk | contribs)
Created page with "在使用诸如 programs.waybar.enable 这样的配置选项时,waybar 在 Niri 上可能会启动两次。这是因为[$1 默认的 Niri 配置文件会在系统启动时自动启动 waybar]。请从该配置文件中移除 spawn-at-startup "waybar" 的设置,或者在不使用 home-manager 选项的情况下,将 waybar 添加到系统的软件包列表中。"
 
(18 intermediate revisions by 2 users not shown)
Line 36: Line 36:
== 配置 ==
== 配置 ==


<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 80: 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 97: 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 114: 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 130: 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 138: 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 152: 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 164: 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 172: 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 192: 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 添加到系统的软件包列表中。

另见