Sway中文维基
Sway不是X11窗口管理器!配置时请仔细阅读文档。
安装前
Nvidia用户
不支持所有专有图形驱动程序,包括英伟达专有驱动程序。可以改用开源的Nouveau驱动程序。提示:购买硬件时要考虑开源支持。
登陆管理器
一些登录管理器支持Wayland,而另一些则不支持。如果您在启动sway时遇到问题,并且您使用了登录管理器,那么您的第一步应该是禁用登录管理器并按照man 1 sway
所述运行sway。如果它有效,请向您的登录管理器反馈bug,而不是向Sway反馈。
可用的登陆管理器列表如下:
- greetd - 一款轻量并灵活的登录管理器
- emptty - dead simple CLI Display Manager on TTY
- Ly - 一款轻量级的基于文本用户界面(类似 ncurses)的显示管理器
- autologin - 自动登录到已配置的账户;对于单用户且采用其他启动认证方式(如加密硬盘)的计算机而言,这一功能堪称完美。
您可以在没有登录管理器的情况下自动启动sway,例如,将以下代码添加到您的.bash_profile
(BASH)、.zlogin或.zprofile
(ZSH)中
:
# If running from tty1 start sway
[ "$(tty)" = "/dev/tty1" ] && exec sway
对于Fish Shell, 创建文件~/.config/fish/conf.d/sway.fish
写入以下内容
# If running from tty1 start sway
set TTY1 (tty)
[ "$TTY1" = "/dev/tty1" ] && exec sway
配置Sway
建议的Sway配置文件存放位置为~/.config/sway/config
,开始配置sway前,建立该目录并拷贝默认配置文件到此处。
mkdir -p ~/.config/sway
cp /etc/sway/config ~/.config/sway/
vi ~/.config/sway/config
查阅默认配置,其中注释了每个选项的作用。有关更多的配置命令信息请参考man 5 sway
。
显示配置
Sway可直接进行显示管理,而不需要如xrandr
软件。
运行swaymsg-t get_outputs
以获取输出名称列表。然后使用output
命令排列显示。
详情请查阅 man 5 sway-output
多显示器
通过使用output
命令,管理多个显示器非常简单。
例如,如果我们想要一个名为 HDMI1的显示器,分辨率为1920x1080,在它的右边是一个名为 eDP1的笔记本电脑外接显示器,分辨率为1600x900;在配置文件中写入如下代码即可:
output HDMI1 pos 0 0 res 1920x1080
output eDP1 pos 1920 0 res 1600x900
如果你想将外接显示器设为sway启动时使用,可以在sway配置中添加如下内容:
focus output <name-or-identifier>
或
exec swaymsg focus output <name-or-identifier>
所以它不会在重载时触发。详情请查阅 man 5 sway-output
Clamshell模式
关闭显示屏模式。这种模式下,你的笔记本电脑盖子是合上的,并且使用外接显示器作为输出设备。从Sway 1.1版本起,你可以使用切换事件来实现特定功能,比如在合上笔记本电脑盖子时禁用某个输出设备。使用 swaymsg -t get_outputs
获取笔记本的输出设备名,例如 eDP-1
.
set $laptop <laptop_output_identifier>
bindswitch --reload --locked lid:on output $laptop disable
bindswitch --reload --locked lid:off output $laptop enable
在使用clamshell模式时重新加载Sway,显示屏可能会重置(即两个显示屏都会启用)。要阻止这种情况发生,请保存以下Bash脚本:
#!/usr/bin/bash
if grep -q open /proc/acpi/button/lid/LID/state; then
swaymsg output <LAPTOP> enable
else
swaymsg output <LAPTOP> disable
fi
将 <LAPTOP>
替换为显示器名称。
为了确保重新加载 Sway 时这个脚本都能运行,需要在你的 Sway 配置文件里添加这一行:
exec_always /path/to/script.sh
高分辨率(HiDPI)
HiDPI(高分辨率)可通过输出设备及其缩放(scale)选项来启用。
output <name> scale <I>
<I> 是整数缩放因子(对于HiDPI屏幕,通常为2 )
如果缩放功能已启用,在定义相对位置时就必须加以考虑。例如,如果左侧显示器(HDMI1)的缩放因子为 2,那么右侧输出设备的相对位置就必须除以 2。如下配置示例:
output HDMI1 scale 2
output HDMI1 pos 0 0 res 3200x1800
output eDP1 pos 1600 0 res 1920x1080
请注意,eDP1的x坐标为1600,即3200÷2 。
分数缩放
sway支持分数缩放但 不推荐 使用。 您的显示器没有分数像素,如果启用分数缩放,我们无法如实显示您的窗口,图像质量也会下降。 您应该选择适合您显示器的整数缩放因子,并根据需要配置软件的字体大小。 如果您仍然想使用分数缩放,操作也很简单,例如output <name> scale 1.5
显示旋转
使用output <name> transform 90
可以将 <name>
顺时针旋转90°。参考man 5 sway-output
可以获得关于transform
的更多选项,比如按横/竖轴旋转等。
根据内置传感器自动旋转屏幕,可参考rot8。
Redshift equivalent
Redshift会根据您的周围环境调整屏幕的色温。如果您晚上在屏幕前工作,这可能有助于减轻眼睛的疲劳。不过,遗憾的是,Redshift不支持Wayland。
然而,有一个名为gammastep的Redshift分支版本确实支持Wayland。
其他替代方案包括wlsunset, wl-gammarelay 和 wl-gammarelay-rs。
输入配置
使用swaymsg -t get_inputs
来列出所有可用输入设备。 在配置文件中使用设备id(identifier)来设置自定义配置:
input <identifier> {
# ...config options...
}
针对不同设备设置多个配置:
# default layout
input "1:1:AT_Translated_Set_2_keyboard" {
xkb_layout us
}
# custom layout for an external keyboard
input "1452:591:Custom_Keyboard" {
xkb_layout YourCustomLayout
}
请参阅 man 5 sway-input
以检查可用选项说明。
键盘布局(Keyboard layout)
input "type:keyboard" { # or input <identifier>
xkb_layout us,de
xkb_variant ,nodeadkeys
xkb_options grp:alt_shift_toggle
}
参考 man 7 xkeyboard-config
可以查看多个选项,如 xkb_layout
, xkb_model
, xkb_options
, xkb_rules
, 和 xkb_variant
等命令. 使用时用逗号隔开。
针对不同用户的配置,加载配置文件位置在~/.xkb/
或 $XDG_CONFIG_HOME/xkb/
。
例如:
- 将大写锁定键(caps lock)设为退格键(escape):
xkb_options caps:escape
- 交换大写锁定键(caps lock)和退格键(escape):
xkb_options caps:swapescape
- 将大写锁定键(caps lock)设为Ctrl键:
xkb_options ctrl:nocaps
- 交换左 Alt 和 Super 键,并将 Caps Lock 设置为 Escape 键:
xkb_options altwin:swap_lalt_lwin,caps:escape
请注意,要触发多个选项,您需要用逗号分隔列出它们,例如xkb_options caps:escape,altwin:swap_lalt_lwin
如果您写成多个xkb_options
行,则只有最后一个会生效。
加载自定义的xkb键映射文件
input "type:keyboard" { # or input <identifier>
xkb_file ~/.config/xkb/custom
}
键盘重复延迟和速率
input "type:keyboard" { # or input <identifier>
repeat_delay 500
repeat_rate 5
}
加载修改后的自定义xkb键映射
参考#4250
如果您只想更改几个键映射,可以通过覆盖您常用布局的键映射来创建自己的键映射。
input type:keyboard {
# 修改后的程序员 Dvorak 布局。 文件位置 ~/.xkb/symbols/dvp_alt_gr_remapped_to_super
xkb_layout "dvp_alt_gr_remapped_to_super"
# Caps Lock 键应作为 Escape 键使用
# See /usr/share/X11/xkb/rules/xorg.lst for options
xkb_options caps:escape
repeat_delay 250
repeat_rate 45
}
~/.xkb/symbols/dvp_alt_gr_remapped_to_super
内容如下:
default partial alphanumeric_keys
xkb_symbols "basic" {
include "us(dvp)"
name[Group1] = "Modified programmer Dvorak";
key <RALT> { [ Super_L, Super_R ] };
};
有关如何覆盖键映射的完整文档可在此链接中找到。这里提供了一个经过简化的版本,并附有实用的注释示例。
Libinput 配置选项
input <device name> {
left_handed enabled
tap enabled
natural_scroll disabled
dwt enabled
accel_profile "flat" # disable mouse acceleration (enabled by default; to set it manually, use "adaptive" instead of "flat")
pointer_accel 0.5 # set mouse sensitivity (between -1 and 1)
}
请参阅 man 5 sway-input
以获取所有可用选项。
壁纸
Feh和类似的工具无法在Wayland中运行. Sway支持使用 swaybg 来设置壁纸. 通过output
命令的 bg 选项来进行设置:
例: output HDMI-A-1 bg ~/wallpaper.png stretch
查阅output配置 man 5 sway-output
。
更多设置可参考 Sway一些有用的扩展。
Sway任务栏设置(Swaybar)
Swaybar支持和 i3bar 同样的特性配置。 可通过在配置文件中添加 bar
字段来配置:
bar {
# ...bar options..
}
完整配置选项可查阅 man 5 sway-bar
。
截屏
基于X11的 scrot
无法使用。 推荐使用 grim.
grim从Wayland合成器获取图像,而 slurp从Wayland合成器中选择一个区域,并将其输出到标准输出,grim 和 slurp 搭配使用效果最佳!
Grimshot是一款适用于Sway的易用截图工具。它基于grim、slurp和jq提供了便捷的界面,支持使用wl-copy将截图直接保存到剪贴板,或者保存为文件。
shotman是一款简洁、轻量、拥有现代用户界面的截图工具,且它依赖于grimshot。
flameshot拥有简洁直观的图形用户界面,还配备各种编辑工具。
swappy是另一款工具(用C语言编写,使用GTK和Pango),它会弹出一个图形用户界面,允许对截图进行基本操作,如添加文本、箭头、圆形、方形以及选择颜色。它有一个配置文件可用于自定义图形用户界面。它也可以在不依赖grim的情况下运行。
录制屏幕
对于基于wlroots的窗口管理器(如swaywm),可尝试使用wf-recorder进行屏幕录制。如果你使用OBS Studio,27.0及以上版本原生支持通过PipeWire进行屏幕录制。对于更低版本,针对基于wlroots的窗口管理器,你可以使用wlrobs录制插件。
程序启动器
- bemenu works as a dmenu replacement.
- sway-desktop-launcher: TUI Application launcher with Desktop Entry support.
- wofi is a rofi-like launcher. 推荐
- yofi is a minimalistic menu for wayland.
更多设置可参考 Sway一些有用的扩展。
屏幕缩放功能
对于swaywm/wlroots来说,目前还无法实现。请查看此处或参与相关讨论。
设置环境变量
设置变量的方式将取决于Sway的启动方式。
环境变量是从启动Sway的进程继承而来的。你需要在那里设置变量。
一些可行的方法如下:
- 登录管理器:查阅相关文档。
- 登录 shell:在启动Sway之前,在其中使用
export
命令设置变量。 - 用户服务:使用
EnvironmentFile=
键和一个环境文件。
更多参考这里
常见问题
如何去掉应用程序的标题栏?
在配置文件中使用default_border
命令。default_border normal
会显示标题栏,而none
和pixel
则不会。border
命令仅作用于当前聚焦的窗口。default_border
是一项设置,border
是一个操作。
请注意,default_border
仅影响新窗口。即使重新加载sway后,对于任何你不想看到标题栏的窗口,都需要关闭并重新打开。
托盘图标在哪里?
swaybar对托盘图标的初始支持已通过#3249拉取请求合并。缺失的功能在#3799中进行跟踪。
如何配置rxvt-unicode(URxvt)的透明度?
URxvt的透明度需要设置“真透明度”。将以下内容添加到你的.Xresources
文件中,然后通过xrdb ~/.Xresources
重新加载:
URxvt*depth: 32
URxvt*background: rgba:0000/0000/0200/c800
注意,此配置会与URxvt.reversevideo
冲突。如果你启用了reversevideo
选项,那么变为透明的将是文本而非背景。
在Sway配置文件~/.config/sway/config
中添加exec xrdb ~/.Xresources
,以便在启动时进行配置。
没有使用logind但仍希望DBus/PolKit/电源管理能够正常工作
我该怎么做呢?
如果你正在使用ConsoleKit2,可以通过以下方式启动Sway:
exec ck - launch - session dbus - launch --sh - syntax --exit - with - session sway
或者,你也可以省略ck - launch - session
这部分。
xbacklight
顾名思义,xbacklight是一款用于X系统的工具。不过,你可以使用brightnessctl, brillo, light ,或者直接操作/sys/class/backlight
。
例如:
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
绑定快捷键(锁定状态下)XF86MonBrightnessDown
,执行brightnessctl
将亮度调低5% ;绑定快捷键(锁定状态下)XF86MonBrightnessUp
,执行brightnessctl
将亮度调高5% 。
使用哪个终端模拟器?
既可以使用基于X的终端模拟器,也可以使用原生支持Wayland的终端模拟器,两者在功能上差异不大。
Alacritty, Kitty, foot, 或wezterm无需额外配置即可使用Wayland。你还可以使用基于VTE的终端,如GNOME Terminal。基于X的rxvt-unicode(URxvt)也是一个颇受欢迎的选择。
第XX行显示“Error on line XX […] Unknown key”的错误?
在配置文件中,第XX行把bindsym
替换为bindcode
。
特定语言区域的配置技巧
法语键盘布局下的工作区切换
法语键盘布局下,数字键只有在按下Shift键(或大写锁定键处于激活状态)时才会输出数字,所以你需要使用数字键下方的各种特殊字符(&、é、" 等)来设置按键绑定:
bindsym $mod+ampersand workspace 1
bindsym $mod+eacute workspace 2
bindsym $mod+quotedbl workspace 3
bindsym $mod+apostrophe workspace 4
bindsym $mod+parenleft workspace 5
bindsym $mod+minus workspace 6 # +section on Apple keyboards
bindsym $mod+egrave workspace 7
bindsym $mod+underscore workspace 8 # +exclam on Apple keyboards
bindsym $mod+ccedilla workspace 9
bindsym $mod+agrave workspace 10
美式/俄式双键盘布局下的按键绑定
如果你将键盘配置为美式和俄式两种布局(input * xkb_layout us,ru
),那么当俄式键盘启用时,使用拉丁字母设置的按键绑定将无法生效(例如,$mod+f
不起作用,因为在俄式布局下无法打出字母 f
)。
为了使按键绑定无论当前激活的是哪种键盘布局都能生效,你可以使用bindsym --to-code
:
bindsym --to-code {
$mod+b splith
$mod+v splitv
}
记忆并切换目标窗口
配置示例:
##################################
# window switch setting
set $mode_set_switch_window "set_switch_window: [0]-[9]"
mode $mode_set_switch_window {
bindsym 1 mark 1; mode "default"
bindsym 2 mark 2; mode "default"
bindsym 3 mark 3; mode "default"
bindsym 4 mark 4; mode "default"
bindsym 5 mark 5; mode "default"
bindsym 6 mark 6; mode "default"
bindsym 7 mark 7; mode "default"
bindsym 8 mark 8; mode "default"
bindsym 9 mark 9; mode "default"
bindsym 0 mark 0; mode "default"
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+ctrl+t mode $mode_set_switch_window
set $mode_switch_window "switch_window: [0]-[9]"
mode $mode_switch_window {
bindsym 1 [con_mark="1"] focus; mode "default"
bindsym 2 [con_mark="2"] focus; mode "default"
bindsym 3 [con_mark="3"] focus; mode "default"
bindsym 4 [con_mark="4"] focus; mode "default"
bindsym 5 [con_mark="5"] focus; mode "default"
bindsym 6 [con_mark="6"] focus; mode "default"
bindsym 7 [con_mark="7"] focus; mode "default"
bindsym 8 [con_mark="8"] focus; mode "default"
bindsym 9 [con_mark="9"] focus; mode "default"
bindsym 0 [con_mark="0"] focus; mode "default"
bindsym t mode $mode_set_switch_window
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+t mode $mode_switch_window
切换工作区时将其移至当前输出设备
如果你希望在使用 $mod + <数字>
切换工作区时,工作区能移至当前输出设备,而不是让焦点转移到工作区当前绑定的其他输出设备上,那么请在配置文件中,将每一行 bindsym $mod + <数字>
替换为以下内容(当然,要针对每个 <数字>
进行替换):
bindsym $mod+1 [workspace="1"] move workspace to output current; workspace number 1
移动工作区所有窗口
set $mode_move_all_workspace_windows "Move all workspace windows to [0-9]?"
mode $mode_move_all_workspace_windows {
bindsym 1 [workspace=".*"] move to workspace 1; workspace number 1, mode "default"
bindsym 2 [workspace=".*"] move to workspace 2; workspace number 2, mode "default"
bindsym 3 [workspace=".*"] move to workspace 3; workspace number 3, mode "default"
bindsym 4 [workspace=".*"] move to workspace 4; workspace number 4, mode "default"
bindsym 5 [workspace=".*"] move to workspace 5; workspace number 5, mode "default"
bindsym 6 [workspace=".*"] move to workspace 6; workspace number 6, mode "default"
bindsym 7 [workspace=".*"] move to workspace 7; workspace number 7, mode "default"
bindsym 8 [workspace=".*"] move to workspace 8; workspace number 8, mode "default"
bindsym 9 [workspace=".*"] move to workspace 9; workspace number 9, mode "default"
bindsym 0 [workspace=".*"] move to workspace 10; workspace number 10, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+shift+ctrl+m mode $mode_move_all_workspace_windows
故障排除
我该如何报告问题?
我们希望你能提供三样东西:你的Sway版本、配置文件以及调试日志。获取版本的方法如下:
swaymsg -t get_version
或者
sway -v
获取调试日志的方法如下:
sway -d 2> ~/sway.log
这将记录sway运行时的活动信息。简要重现你的问题,然后退出sway。将此文件与你的配置文件一起上传到gist.github.com,并在GitHub问题中(或在IRC上寻求帮助时)附上链接。准备调试日志时,要简洁一些——启动sway,执行重现错误所需的最少操作,然后关闭sway。同时在GitHub问题中用简单的英语说明你采取的步骤。
如果问题并非一目了然,你可能需要自行调试——我们都是志愿者,空闲时间有限。
安装了Sway鼠标指针可以移动但键盘无法使用
你按的键是否绑定了相关操作呢?查看一下配置文件。如果$mod + Return
绑定到了exec alacritty
(默认是这样),那你安装了Alacritty吗?试试$mod + 2
或$mod + 8
,能切换工作区吗?
无法运行任何程序
在配置文件中查找启动启动器的键盘快捷键。你是在尝试运行X应用程序吗?你可能没有安装Xwayland。有关安装xwayland的说明,请查阅你所使用发行版的文档。
键盘快捷键不起作用
如果你在X11环境且i3正在运行的情况下运行Sway,i3会拦截原本要发送给Sway的任何按键操作。如果你使用完全相同的按键绑定,那么Sway将永远接收不到这些按键信息。
i3-dmenu-desktop无法正常工作
不过你仍然可以手动应用该补丁:
wget 'https://patch-diff.githubusercontent.com/raw/i3/i3/pull/2265.patch'
sudo patch -p0 /usr/bin/i3-dmenu-desktop < 2265.patch
最喜欢的应用程序显示不正常该如何解决?
禁用客户端Qt装饰
目前,Qt默认使用X11后端,而非原生的Wayland后端。若要使用Wayland后端,需设置QT_QPA_PLATFORM=wayland
。这样一来,Qt会为所有窗口绘制客户端装饰,若要禁用,可设置QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
。
调整Sway边框的窗口规则
如果你想让某个特定应用程序使用其内置的窗口装饰,而非Sway的边框,可以在配置文件中编写如下规则:
for_window [app_id="nautilus"] border none
Java应用程序相关问题
尝试在你的环境中设置_JAVA_AWT_WM_NONREPARENTING=1
(来源)。你可以通过在 ~/.profile
文件中添加以下代码片段来实现:
if [ "$XDG_SESSION_DESKTOP" = "sway" ] ; then
# https://github.com/swaywm/sway/issues/595
export _JAVA_AWT_WM_NONREPARENTING=1
fi
这似乎能解决窗口空白以及菜单绘制位置与所选菜单项偏移错误的问题。
JetBrains IDE弹出窗口/菜单失去焦点的问题
一些JetBrains IDE(包括Android Studio)自带Java 1.8 JRE,但在Sway中要正常运行,需要后续JRE版本中包含的修复。你可以通过以下调用形式,指示你的IDE使用不同的JRE:
STUDIO_JDK=/usr/lib/jvm/java-11-openjdk-amd64/ /opt/android-studio/bin/studio.sh
如果你运行的是Sway 1.4或更早版本,你还需要升级到Sway/wlroots主分支,因为那里也有必要的修复。
状态图标不显示
状态图标有两种标准:XEmbed和StatusNotifierItem(SNI)。XEmbed属于旧标准,Sway中未实现。Swaybar支持SNI。如果你的应用程序使用XEmbed,状态图标将不会显示。你应该要求开发者将其升级到SNI。
对于network-manager-applet,详见https://wiki.archlinux.org/index.php/NetworkManager#Appindicator
非systemd的Linux发行版Sway无法启动
安装多个GPU情况下Sway无法启动
除非另有指定,wlroots
会为你选择一块显卡,而且你可能会在Sway的日志中看到类似这样的信息:
若要使用不同的默认显卡(在/dev/dri/
中列出),在启动Sway前设置这个环境变量:
WLR_DRM_DEVICES=/dev/dri/card1 sway
很可能你希望Sway使用集成(英特尔)显卡,因为这可能是唯一直接连接到笔记本电脑显示屏的显卡。然而,/dev/dri/
中的节点名称与实际显卡之间的映射关系,并不能保证在每次重启后都保持一致。
以下脚本会检测集成显卡的设备路径,并据此启动Sway:
#!/bin/sh
val=$(udevadm info -a -n /dev/dri/card1 | grep boot_vga | rev | cut -c 2)
WLR_DRM_DEVICES="/dev/dri/card$val" sway
你也可以像这样配置多个显卡:
WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1 sway
第一张显卡用于实际渲染,而显示缓冲区会被复制到第二张显卡,以用于连接到它们的任何显示器。
GTK+3主题无法使用
拔掉外接显示器后高分辨率屏幕上应用程序显示过大
详见wlroots问题#1119。这是Xwayland的一个问题,在1.20.9版本中已修复。
解决方法:
- 如果不存在,创建文件
~/.Xresources
。 - 在
~/.Xresources
中添加以下一行内容:Xft.dpi: 96
- 在Sway配置文件中添加以下一行内容:
exec xrdb -load ~/.Xresources
某个应用程序是否在使用Xwayland?
要判断一个应用程序使用的是Xwayland还是原生Wayland,你可以尝试以下方法之一:
- 运行
xeyes
,然后将鼠标移到该应用程序上。只有当窗口使用Xwayland时,“眼睛”才会移动。 - 在配置文件中添加
for_window [shell=".*"] title_format "%title :: %shell"
。 - 使用
swaymsg -t get_tree
转储所有窗口的相关信息。
工作区中鼠标事件无法正常工作
如果你的显示器布局使用了负像素,那么你很可能遇到了这个问题:https://gitlab.freedesktop.org/xorg/xserver/issues/899 。 这是Xwayland的一个漏洞。解决办法是重新调整工作区布局,避免使用负像素。
热插拔后Xwayland的DPI升高
这是Xwayland的一个问题。这通常会导致文本过大。作为一种解决方法,在~~/.Xresources
文件中添加Xft.dpi: 96
,并在Sway配置文件中添加exec xrdb -load ~/.Xresources
。
我无法在Firefox中使用外部应用程序打开链接。
如果你收到“Firefox 已在运行”的消息,设置环境变量MOZ_DBUS_REMOTE=1
(适用于Firefox 74及以上版本,需有dbus支持)。相关解释见https://mastransky.wordpress.com/2020/03/16/wayland-x11-how-to-run-firefox-in-mixed-environment
Android Studio将菜单绘制在错误的位置
可以尝试如下操作:
# For Android Studio
export _JAVA_AWT_WM_NONREPARENTING=1
export STUDIO_JDK=/usr/lib/jvm/java-14-openjdk
# For Gradle
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
调整jdk路径,使其指向你系统中的有效位置。
GTK+应用程序启动需要20秒
这是因为GTK+ 会通过D-Bus等待xdg-desktop-portal
启动。由于D-Bus激活的服务不知道要连接哪个WAYLAND_DISPLAY
,所以会出现超时。
可以通过在配置文件中添加以下内容来解决此问题:
exec dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK
或者,在环境中设置GTK_USE_PORTAL=0
。
更多详细信息:https://github.com/swaywm/sway/issues/5732
Wayland不允许我以root用户身份运行应用程序
一般来说,不建议以root用户身份运行图形化应用程序。现代的Linux发行版通常都配置了Polkit系统,该系统允许应用程序根据需要请求特定管理操作的权限。Arch Linux关于Polkit的维基页面是很好的信息来源:https://wiki.archlinux.org/title/Polkit 。
作为Sway用户,你可能只需运行任意一个Polkit认证代理程序。当Polkit认证代理程序运行时,如果某个应用程序支持Polkit且某些操作需要管理权限,你就会收到提示。
认证代理程序的确切位置取决于你的发行版。两种最常见的代理程序是:
- polkit-gnome-authentication-agent-1 (GTK/Gnome)
- polkit-kde-authentication-agent-1 (Qt/KDE)
它们通常位于/usr/libexec
或/usr/lib
目录中。例如,你可以在Sway配置文件中添加如下内容:exec "/usr/libexec/polkit-gnome-authentication-agent-1"
。
如果应用程序不支持Polkit,或者你运行的系统没有安装Polkit,而你又确实需要以root用户身份运行图形化应用程序,还有一个备用选项:sudo --preserve-env=XDG_RUNTIME_DIR,WAYLAND_DISPLAY <app>
,或者简写成sudo -E <app>
。不过,这应该作为最后的手段。
Clutter应用程序在启动时挂起
这归根结底是因为Clutter依赖已弃用的wl_shell
协议。在https://gitlab.gnome.org/GNOME/clutter/-/merge_requests/5合并之前,一个变通方法是设置CLUTTER_BACKEND=gdk
,让它使用gdk,而不是尝试直接与合成器交互。
Nouveau显卡驱动下Sway出现乱码或黑屏
可能表现为黑屏,窗口或状态栏完全不显示,只有鼠标指针可见。也可能表现为显示器无信号输入,处于非活动状态。
尝试设置WLR_DRM_NO_MODIFIERS=1
。如果已经设置了该参数,尝试取消设置。
启用修饰符时出现问题,是由于Nouveau的两个漏洞导致,这些漏洞已在以下合并请求中修复,并在mesa 21.1.0版本中发布:
- https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8500
- https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3724
sway如何设置键盘音量键?
您需要在配置文件中绑定这些按键。例如,如果你正在使用PulseAudio:
bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
显示器在插入时没有被检测到
有时,内核驱动程序在检测某些端口上的热插拔监视器时会出现问题。 Try this (adapt card0
and DP-1
to the GPU and connector you’re using):
echo detect | sudo tee /sys/class/drm/card0-DP-1/status
本文翻译自英文官方维基,原文在这里https://github.com/swaywm/sway/wiki