Tutorials/Using Other Window Managers with Plasma/zh-cn: Difference between revisions
Updating to match new version of source page |
Updating to match new version of source page |
||
Line 1: | Line 1: | ||
<languages /> | <languages /> | ||
<span id="Introduction"></span> | |||
==介绍== | ==介绍== | ||
Line 18: | Line 19: | ||
** 混成器也可以帮助解决屏幕撕裂,但在大多数情况下,检查视频驱动程序往往是更高效的方案。 | ** 混成器也可以帮助解决屏幕撕裂,但在大多数情况下,检查视频驱动程序往往是更高效的方案。 | ||
<span id="Set-up"></span> | |||
<div class="mw-translate-fuzzy"> | <div class="mw-translate-fuzzy"> | ||
==在Plasma中使用其他的窗口管理器== | ==在Plasma中使用其他的窗口管理器== | ||
Line 24: | Line 26: | ||
To use a different window manager with Plasma, replace the systemd service for KWin with a new user unit for your preferred WM. A tutorial can be found in the [https://wiki.archlinux.org/title/KDE#Use_a_different_window_manager ArchWiki]. | To use a different window manager with Plasma, replace the systemd service for KWin with a new user unit for your preferred WM. A tutorial can be found in the [https://wiki.archlinux.org/title/KDE#Use_a_different_window_manager ArchWiki]. | ||
<span id="Configuration"></span> | |||
<div class="mw-translate-fuzzy"> | <div class="mw-translate-fuzzy"> | ||
== I3 配置== | == I3 配置== | ||
Line 32: | Line 35: | ||
===i3=== | ===i3=== | ||
<span id="Installation"></span> | |||
<div class="mw-translate-fuzzy"> | <div class="mw-translate-fuzzy"> | ||
===安装=== | ===安装=== | ||
Line 38: | Line 42: | ||
在开始配置之前,您应该确保系统上安装了i3或i3-gap。如果没有,请使用包管理器或[[Special:myLanguage/Discover|Discover]] 安装这两个包中的一个。 | 在开始配置之前,您应该确保系统上安装了i3或i3-gap。如果没有,请使用包管理器或[[Special:myLanguage/Discover|Discover]] 安装这两个包中的一个。 | ||
<span id="Configure_i3"></span> | |||
<div class="mw-translate-fuzzy"> | <div class="mw-translate-fuzzy"> | ||
== 配置I3== | == 配置I3== | ||
Line 81: | Line 86: | ||
</nowiki>}} | </nowiki>}} | ||
<span id="Configure_Plasma"></span> | |||
<div class="mw-translate-fuzzy"> | <div class="mw-translate-fuzzy"> | ||
===配置 Plasma=== | ===配置 Plasma=== | ||
Line 94: | Line 100: | ||
* A single Plasma panel, in most cases, is detected properly and bspwm will not place windows in its space. If the panel ends up presenting a problem, or when using multiple panels, the following may be added to '''.bspwmrc'''{{Input|1=<nowiki>bspc config top_padding size</nowiki>}}where '''size''' is the size of the panel in pixels. Also valid are bottom_padding, left_padding, and right_padding. As many of these directives may be used as necessary for multiple panels. | * A single Plasma panel, in most cases, is detected properly and bspwm will not place windows in its space. If the panel ends up presenting a problem, or when using multiple panels, the following may be added to '''.bspwmrc'''{{Input|1=<nowiki>bspc config top_padding size</nowiki>}}where '''size''' is the size of the panel in pixels. Also valid are bottom_padding, left_padding, and right_padding. As many of these directives may be used as necessary for multiple panels. | ||
===awesomewm=== | |||
Following rules help Plasma to work as intended. | |||
Add these entries into <code>awful.rules.rules</code> table | |||
{{Input|1=<nowiki> | |||
{ -- General plasma rules | |||
rule_any = { | |||
class = { | |||
"plasmashell", | |||
"ksmserver-logout-greeter", | |||
}, | |||
}, | |||
properties = { | |||
floating = true, | |||
border_width = 0, | |||
titlebars = false, -- custom property to control titlebars | |||
}, | |||
}, | |||
{ -- KDE apps | |||
rule_any = { | |||
class = { | |||
"spectacle", | |||
"krunner" | |||
} | |||
}, | |||
properties = { | |||
floating = true, | |||
} | |||
}, | |||
</nowiki>}} | |||
Plasma widgets hide when they become unfocused. We do not want Desktop and Panel to be focusable, but want other <code>plasmashell</code> windows to remain focusable. A way to achieve this is with "manage" signal handler. An example handler: | |||
{{Input|1=<nowiki> | |||
client.connect_signal("manage", function(c) | |||
--... your config | |||
if c.type == "dock" -- Plasma Panel | |||
or c.type == "desktop" then -- Plasma Desktop | |||
c.focusable = false | |||
c:tags(c.screen.tags) -- show on all tags from this screen. | |||
end | |||
-- Show titlebars only if enabled. | |||
if c.titlebars then | |||
awful.titlebar.show(c) | |||
else | |||
awful.titlebar.hide(c) | |||
end | |||
-- Place floating windows. Plasma widgets provide this info | |||
if c.floating then | |||
if c.size_hints.user_position then | |||
c.x = c.size_hints.user_position.x | |||
c.y = c.size_hints.user_position.y | |||
end | |||
if c.size_hints.user_size then | |||
c.width = c.size_hints.user_size.width | |||
c.height = c.size_hints.user_size.height | |||
end | |||
end | |||
.. | |||
end) | |||
</nowiki>}} | |||
You may match Plasma Desktop using the following rule: | |||
{{Input|1=<nowiki> | |||
rule_any = { | |||
name = { | |||
"Desktop.*Plasma", | |||
}, | |||
}, | |||
</nowiki>}} | |||
==Hints and Tips== | ==Hints and Tips== |
Latest revision as of 01:30, 22 October 2023
介绍
在Plasma中,默认的窗口管理器(WM)是KWin,它有很多特性,但是它只支持浮动窗口。Plasma允许你使用其他的窗口管理器,比如 i3, bspwm 或者 任何其他的平铺窗口管理器
大多数窗口管理器很少需要对其配置文件进行更改。
使用另一个窗口管理器时需要注意的一些事项:
- 平铺窗口管理器在使用组件(如面板)时可能会有问题。对于某些配置,某些选项将有助于缓解问题
大多数窗口管理器没有自己的混成器(compositors),因此缺乏像动画和透明度这样的特性。如果想要这些特性,就需要安装一个混成器 - 参见Arch Wiki
- 混成器也可以帮助解决屏幕撕裂,但在大多数情况下,检查视频驱动程序往往是更高效的方案。
在Plasma中使用其他的窗口管理器
To use a different window manager with Plasma, replace the systemd service for KWin with a new user unit for your preferred WM. A tutorial can be found in the ArchWiki.
I3 配置
To make a non-standard WM work well with Plasma, some additional configuration may be required.
i3
安装
在开始配置之前,您应该确保系统上安装了i3或i3-gap。如果没有,请使用包管理器或Discover 安装这两个包中的一个。
配置I3
当你第一次启动i3时,它的默认全局配置(在/etc/i3/config
)将启动i3配置向导(i3-config-wizard), 它会让你选择一个键作为Mod键,并在~/.i3/config
生成用户本地配置。
如果您希望跨用户维护相同的配置(用户仍然可以用自己的本地配置覆盖它),请从全局配置文件中删除向导调用,直接使用全局配置文件。
下面的i3窗口规则将帮助你处理通知和其他一些Plasma窗口:
for_window [title="Desktop — Plasma"] kill; floating enable; border none for_window [class="plasmashell"] floating enable; for_window [class="Plasma"] floating enable; border none for_window [title="plasma-desktop"] floating enable; border none for_window [title="win7"] floating enable; border none for_window [class="krunner"] floating enable; border none for_window [class="Kmix"] floating enable; border none for_window [class="Klipper"] floating enable; border none for_window [class="Plasmoidviewer"] floating enable; border none for_window [class="(?i)*nextcloud*"] floating disable for_window [class="plasmashell" window_type="notification"] floating enable, border none, move right 700px, move down 450px no_focus [class="plasmashell" window_type="notification"]
如果你使用非英语安装的Plasma,你需要找出桌面的确切窗口标题是什么。一种方法是使用wmctrl -l
。
比如这行
for_window [title="Desktop — Plasma"] kill; floating enable; border none
将窗口的名称添加到i3配置。这个例子是德语安装的Plasma。
通知的定位可能很棘手,因为并非所有通知的大小都取决于其内容。你也可以使用坐标定位,知道你的屏幕分辨率。例如,对于一个1920x1080的屏幕设置右上角的通知,可以使用这样的配置:
for_window [class="plasmashell" window_type="notification"] floating enable, border none, move position 1450px 20px
If you want to unlock KWallet automatically on login, configure PAM and then add the following line to your i3 configuration file:
exec --no-startup-id /usr/lib/pam_kwallet_init
配置 Plasma
你可能会遇到与“Activities”功能相关的问题-快捷键(其中一些也被i3使用,如“Meta + Q”),似乎让i3没有响应。移除与Activity相关的全局快捷方式似乎可以解决这个问题。
如果要通过Plasma提供的类似i3bar那样的Pager显示,设置 Pager Settings > General > Text display 变为"Desktop name"
Bspwm
For the most part, bspwm requires little additional configuration.
- A single Plasma panel, in most cases, is detected properly and bspwm will not place windows in its space. If the panel ends up presenting a problem, or when using multiple panels, the following may be added to .bspwmrc
bspc config top_padding size
where size is the size of the panel in pixels. Also valid are bottom_padding, left_padding, and right_padding. As many of these directives may be used as necessary for multiple panels.
awesomewm
Following rules help Plasma to work as intended.
Add these entries into awful.rules.rules
table
{ -- General plasma rules rule_any = { class = { "plasmashell", "ksmserver-logout-greeter", }, }, properties = { floating = true, border_width = 0, titlebars = false, -- custom property to control titlebars }, }, { -- KDE apps rule_any = { class = { "spectacle", "krunner" } }, properties = { floating = true, } },
Plasma widgets hide when they become unfocused. We do not want Desktop and Panel to be focusable, but want other plasmashell
windows to remain focusable. A way to achieve this is with "manage" signal handler. An example handler:
client.connect_signal("manage", function(c) --... your config if c.type == "dock" -- Plasma Panel or c.type == "desktop" then -- Plasma Desktop c.focusable = false c:tags(c.screen.tags) -- show on all tags from this screen. end -- Show titlebars only if enabled. if c.titlebars then awful.titlebar.show(c) else awful.titlebar.hide(c) end -- Place floating windows. Plasma widgets provide this info if c.floating then if c.size_hints.user_position then c.x = c.size_hints.user_position.x c.y = c.size_hints.user_position.y end if c.size_hints.user_size then c.width = c.size_hints.user_size.width c.height = c.size_hints.user_size.height end end .. end)
You may match Plasma Desktop using the following rule:
rule_any = { name = { "Desktop.*Plasma", }, },
Hints and Tips
DBus
Since Meta key handling is in part performed by KWin, you will have to handle these shortcuts manually when you switch to a different window manager.
You can open some Plasma components with DBus commands. You can use this to map corresponding keybindings to DBus commands. To find a specific DBus command, you can look at dbus-monitor
or qdbusviewer
while you invoke the component in a standard Plasma set-up.
More info on meta key handling:
Some examples:
- Open Application Launcher
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.activateLauncherMenu
- Open Krunner
qdbus org.kde.kglobalaccel /component/krunner org.kde.kglobalaccel.Component.invokeShortcut 'run command'
- Open logout confirmation screen
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout -1 -1 -1
For i3, you can map a keybinding with the bindsym command. Use --no-startup-id
to prevent the command from generating "i3" entries in the task manager.
Example:
bindsym $mod+Shift+e exec --no-startup-id <command>
If you want to map the modifier key itself, use the bindcode command - you have to specify the keycode generated by the key, which you can get via the xev
utility.
Example for the Meta key:
bindcode 133 --release exec --no-startup-id <command>
For Bspwn, you need to use the bspc
program. See Arch Linux wiki for more information.
More Information
- Window managers (Wikipedia)
- Window managers (Arch Linux wiki)
- Desktop environment (Wikipedia)
- Desktop environment (Arch Linux wiki)