SwayWM - UnixPorn Yourself

Hallo allerseits. In diesem Artikel beschreibe ich meine Erfahrungen beim Einrichten und Verwenden von sway, einem Kachelfenster-Manager für Linux.


Was ist das und warum wird es benötigt?


Offiziell ist sway ein Kachelfenster-Manager, ein transparenter i3wm-Ersatz, der auf Wayland läuft.


Weiland, auch bekannt als Wölund, etc. - Eine Figur aus der altdeutschen und altnordischen Mythologie, über die einst die englische Folkloristin Jessie Weston schrieb. Jetzt weißt du es.

Meiner Meinung nach besteht das Hauptmerkmal von sway jedoch darin, dass es sich um einen Konstrukteur handelt, der alle Vor- und Nachteile dieses Ansatzes aufweist. Wenn Sie Vim (die Ähnlichkeit mit Vim wird durch die Orientierung an der Verwendung der Tastatur noch verstärkt), Archlinux und ähnliche Projekte mögen, dann rate ich Ihnen, sich Sway genauer anzuschauen. Meine persönliche Meinung ist, dass Sie, sobald Sie ein wenig mehr Zeit für die Einrichtung aufgewendet haben, eine sehr stabile und komfortable Umgebung für Sie persönlich erhalten, in der nichts Unerwartetes passieren wird.


Wenn die Nachteile von Sway und Wayland (wie die mangelnde Unterstützung der privaten Treiber von NVidia und die Notwendigkeit, nach Analoga für viele vertraute Programme zu suchen) für Sie fatal erscheinen, empfehle ich Ihnen, auf den x3 i3wm zu achten. Die Konstruktorteile dort werden völlig unterschiedlich sein, Sie müssen xinit installieren, verschiedene .Xauthority konfigurieren, es ist möglich, mit dem Zerreißen umzugehen, aber die allgemeine Logik des Systems ist genau gleich.


Installation


Sway befindet sich wahrscheinlich in den Repositorys Ihrer Distribution. Wenn Sie jedoch eine neuere Version installieren möchten, ist dies sehr einfach. Die Github- Projektseite hat eine knappe Liste ihrer Abhängigkeiten. Installieren Sie sie, klonen Sie das Repository, klonen Sie wlroots in den Ordner wlroots :


 hub clone swaywm/sway hub clone swaywm/wlroots sway/subprojects/wlroots 

(Hier verwende ich einen Hub . Ein nicht standardmäßiges, aber sehr praktisches Werkzeug). Danach können Sie Folgendes konfigurieren und erstellen:


 meson setup ./sway-build ./sway --buildtype=minsize ninja -C ./sway-build doas ninja -C ./sway-build install 

doas ist ein leichter Sudo-Ersatz von OpenBSD-Entwicklern. Linux benutzt normalerweise seine Gabel von OpenDoas.

Starten Sie


Wenn Sie über die Befehlszeile schwanken möchten, ohne Manager wie SDDM zu verwenden, ist dies der einzig richtige Weg


 $ exec sway 

Wenn Sie Sway ohne exec ausführen, den Bildschirm mit Swaylock sperren und Sway abstürzt, werden Sie zurück in die Befehlszeile geworfen. Das Schloss wird unbrauchbar sein.


Hinweis für System-Fans: Für sway ist weder systemd-logind noch elogind erforderlich. Richtig, in diesem Fall müssen Sie das suid-Bit setzen oder Funktionen konfigurieren. Siehe das Wiki .

Umgebungsvariablen


Es gibt mehrere Stellen, an denen ich sie verschreibe.


Shell-Skript unter ~/.local/bin/sway - für schwankungsspezifische Variablen. Ich möchte zum Beispiel, dass Qt-Anwendungen die Szenerie nicht qt5ct und das Thema aus qt5ct :


 #!/bin/bash QT_QPA_PLATFORMTHEME=qt5ct \ QT_WAYLAND_DISABLE_WINDOWDECORATION=1 \ /usr/bin/sway 

~/.pam_environment - für Variablen, die ich sofort in der systemd-Benutzersitzung verfügbar machen möchte. Ein Beispiel:


 SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh" 

Ändern Sie diese Datei jedoch mit Vorsicht, insbesondere wenn Sie andere Umgebungen verwenden. Beispielsweise wird es KDE Plasma nicht sehr gefallen, wenn es dort $WAYLAND_DISPLAY erkennt (ironischerweise wurde das Modul pam_env , das diese Datei verwaltet, vor N Jahren hauptsächlich zum Setzen der Variablen $DISPLAY ).


~/.bashrc - für alle anderen Fälle.


Sway-Setup


Eintreten


In meinem System ist alles ganz einfach: Wir installieren russische und englische Layouts und schalten mit Alt+Shift zwischen ihnen um. In der Sway-Konfiguration sieht das so aus:


 input * { xkb_layout us,ru xkb_options grp:alt_shift_toggle } 

Sway verwendet die libinput Bibliothek für die Eingabe, genau wie KDE und Gnome. Wir haben also viele seiner Optionen zur Verfügung. Touchpad-Einstellungen, natürliches Scrollen, Mauszeiger-Beschleunigung usw. usw. Die Liste der Optionen kann bei der man sway-input und die Liste der Eingabegeräte bei der Ausgabe des Befehls überprüft werden


 swaymsg -t get_inputs 

Ich möchte jedoch auf eine interessante Gelegenheit aufmerksam machen. Wenn Sie aus einer X-Umgebung wechseln, können Sie Ihre Tastatureinstellungen einfach von dort übertragen. Führen Sie den Befehl in dieser Umgebung aus


 $ xkbcomp $DISPLAY /path/to/keymap.xkb 

und im sway config register


 input * { xkb_file /path/to/keymap.xkb } 

Hotkeys


Hotkeys werden wie alles andere in der Konfiguration gesetzt. Es gibt 3 Befehle, um sie zu definieren:


  1. bindswitch . Dies erfolgt beim Öffnen / Schließen des Deckels des Laptops, beim Umschalten in den Tablet-Modus usw.
  2. bindcode . Es wird ausgeführt, wenn eine Taste mit dem angegebenen Code gedrückt wird. Dies hängt nicht vom aktuellen Layout ab, insbesondere bei Multimedia-Tasten.
  3. bindsym . Das aktuell eingegebene Zeichen ist vom Layout abhängig. Wenn Sie jedoch den Parameter --to-code hinzufügen, wird dieses Zeichen implizit in den entsprechenden Code für das erste Layout von xkb_layout (siehe Eingabeeinstellungen).

Ein solcher Hotkey schlägt beispielsweise das aktuelle Fenster unabhängig vom Layout:


 bindsym --to-code $mod+Shift+q kill 

Sie können mehr über diese Parameter im Mana lesen: man 5 sway .


Der Autor von sway hat einen speziellen Keylogger geschrieben, um festzustellen, was gedrückt wurde (er benötigt Root-Rechte, um arbeiten zu können, also keine Sicherheitsbedenken).


Fazit


Eine Liste der verfügbaren Ausgabegeräte erhalten Sie mit dem Befehl


 swaymsg -t get_outputs 

In der Konfiguration für jeden von ihnen können Sie den Videomodus, die Skalierung (einschließlich Bruch), das Bild, die Drehung usw. einstellen. Die einfachste Konfiguration sieht so aus:


 output HDMI-A-1 mode 1920x1080@60Hz output * bg /path/to/wallpaper.jpg fill 

Eine vollständige Liste der Optionen finden Sie im man sway-output Mana.
Es gibt auch ein wlr-randr- Programm, in dem all dies über die Befehlszeile eingestellt werden kann (das heißt, es ist ein Analogon von XRandr für Wayland).


Swaybar


Swaybar - Ein Bereich, in dem Statusinformationen angezeigt werden. Datum, Uhrzeit, Taskleiste usw. usw. Normalerweise verbringen i3- und Sway-Fans die meiste Zeit mit der Einrichtung dieses Panels (oder mehrerer Panels). Persönlich habe ich genug davon, in der Nähe der minimalen Konfiguration:


 bar { position top colors { statusline #ffffff background #282828E6 inactive_workspace #282936BF #282936BF #5c5c5c } font Hack 11 status_command i3blocks } 

Es gibt viele Optionen zum Anpassen von Position, Farben, Schriftarten, Ablage usw. Sie können darüber in Mana - man 5 sway-bar .


Swaybar ist verpflichtet, json im i3bar-Format zu lesen und zu analysieren, das von status_command ausgegeben wird. Es gibt viele Programme, die hier verwendet werden können. i3status , waybar , i3status-rs und viele andere Projekte. Persönlich bevorzuge ich i3blocks wegen der Einfachheit der Konfiguration und der Leichtigkeit, benutzerdefinierte Blöcke hinzuzufügen.


Anwendungssetup


Benachrichtigungen


Dies kann vom Mako- Daemon erledigt werden (höchstwahrscheinlich in Ihrer Distribution). Dort können Sie auch Farben usw. einstellen, dies ist jedoch alles optional. Führen Sie es einfach aus und es wird funktionieren.


Mako implementiert die dbus-basierte XDG Desktop Notifications-Spezifikation. Es wird von vielen Programmen unterstützt, darunter Chromium, Firefox und Telegram.


Terminal-Emulator


In Umgebungen wie KDE verwendet Plasma normalerweise integrierte Emulatoren, die Menüs, Registerkarten und viele andere Gestaltungselemente anzeigen. Aber warum schwankt das alles? Ich bevorzuge Alacritty - sehr schnell dank der Verwendung des GPU-Emulators, übrigens in Rust geschrieben. Ich habe dem Abschnitt key_bindings in seiner Konfiguration ( ~/.config/alacritty/alacritty.yml ) solche Hotkeys hinzugefügt:


 - { key: T, mods: Control|Shift, action: SpawnNewInstance } 

öffne ein neues Fenster mit dem aktuellen Verzeichnis. Ein großartiger Ersatz für Tabs und Sway kümmert sich um das Layout.


 - { key: Up, mods: Control|Shift, action: ScrollLineUp, mode: ~Alt } - { key: Down, mods: Control|Shift, action: ScrollLineDown, mode: ~Alt } 

Eine Zeile nach oben / unten scrollen.


Wir schreiben in der Sway-Konfiguration


 set $term alacritty bindsym $mod+Return exec $term 

Alacritty unterstützt keine Ligaturen, da diese die Rendergeschwindigkeit beeinflussen. Wenn Sie sie noch brauchen, achten Sie auf Kitty - dieser Emulator ist auch sehr schnell und es gibt nur eine erschreckende Menge an Funktionen und Einstellungen unter der Haube.


Anwendungen starten


Anwendungen in Sway werden normalerweise über das Hotkey-Menü gestartet. In der Konfig schreiben sie sowas


 set $menu ... bindsym --to-code $mod+d exec $menu 

Es gibt viele Programme, um das Menü anzuzeigen. Einige, wie Dmenu oder Rofi , benötigen XWayland. Unter denen, die unter Wayland arbeiten, können wir bemenu und sogar krunner unterscheiden (was in KDE mit Alt+F2 . Ja, dies ist ein unabhängiges Programm).


Ich bevorzuge jedoch eine universellere Lösung, nämlich den Sway-Launcher-Desktop . Trotz des Namens kommt es nicht auf Sway an und im Allgemeinen handelt es sich nicht um ein GUI-Programm, sondern um ein kleines Shell-Skript, das in der Konsole funktioniert. Dieses Skript bildet ein Menü aus Programmen in $PATH , installierten Desktop-Dateien (gemäß der XDG Desktop Entry-Spezifikation) und möglicherweise zusätzlichen Quellen (in der Konfiguration konfiguriert). Mit dem wunderbaren Dienstprogramm fzf das Menü anzeigen und durchsuchen - achten Sie darauf.


Um das Menü anzuzeigen, müssen wir mit diesem Programm ein Terminalfenster öffnen. Mit alacritty geht das so:


 set $menu exec alacritty -e sway-launcher-desktop bindsym --to-code $mod+d exec $menu 

Möglicherweise möchten Sie dieses Fenster standardmäßig schweben lassen. In i3 und sway werden solche Regeln in der config mit der for_window Direktive konfiguriert. Um die Regel dem sway-launcher-desktop Fenster zuzuordnen, muss ihr eine eindeutige Klasse zugewiesen werden. Für mich ist es nur Launcher . Beachten Sie, dass aufgrund der Verwendung von Wayland die im i3-Handbuch aufgeführten Kriterien nicht für die Schwingung geeignet sind. Die richtigen sind im Abschnitt CRITERIA . In diesem Fall ist app_id gut geeignet und die endgültige Konfiguration sieht folgendermaßen aus:


 set $menu exec alacritty --class Launcher -e sway-launcher-desktop for_window [app_id="Launcher"] floating enable, border pixel 10, sticky enable bindsym --to-code $mod+d exec $menu 

Autostart-Anwendungen


Um ein Programm automatisch zu starten, können Sie im Prinzip einfach schreiben


 exec /path/to/program 

in der Sway-Konfiguration oder erstellen Sie sogar eine benutzerdefinierte Systemeinheit. In diesem Artikel verwende ich jedoch die von KDE und Gnome übernommene XDG-Autostart-Spezifikation.


Die Spezifikation besteht darin, Desktop-Dateien auszuführen, die sich in den /etc/xdg/autostart und ~/.config/autostart . Diese Dateien werden in der Regel in Paketen mit Programmen geliefert, sind jedoch leicht selbst zu erstellen.


Hier manifestiert sich das modulare Wesen des Schwankens. Sway selbst kennt weder den XDG Autostart noch den XDG Desktop Entry. Darüber hinaus lehnen die Entwickler diese und alle ähnlichen Spezifikationen aktiv ab. Das Dienstprogramm dex console kann sie jedoch verwalten (höchstwahrscheinlich befindet es sich im Repository Ihrer Distribution).


Geben Sie den Befehl ein, um zu überprüfen, was in Autorun sein wird


 $ dex -ade Sway 

a bedeutet Autostart, d - "Trockenlauf", -e Sway legt den Namen der Umgebung fest (es kann eine beliebige sein) und wird zum Filtern verwendet.


Höchstwahrscheinlich wird die resultierende Liste nicht zu Ihnen passen. Zum Beispiel habe ich dort kgpg . Wir gehen wie folgt vor: Kopieren Sie die entsprechende Desktop-Datei von /etc/xdg/autostart nach ~/.config/autostart , fügen Sie dort die Zeile ein


 NotShowIn=Sway 

und erneut Autorun prüfen. Viele Programme (insbesondere solche, die in Electron geschrieben wurden) möchten möglicherweise nicht unter Wayland ausgeführt werden. Wir machen dasselbe mit ihnen. Wir kopieren die Desktop-Datei und ändern dort die Startzeile. Es war:


 Exec=/usr/bin/skypeforlinux 

wurde:


 Exec=env GDK_BACKEND=x11 /usr/bin/skypeforlinux 

Die gleiche Technik kann auf den Sway-Launcher-Desktop aus dem vorherigen Absatz angewendet werden. Wenn alle Probleme behoben sind, fügen Sie die Zeile zur Sway-Konfiguration hinzu


 exec dex -ae Sway 

Oder Sie können das Gegenteil tun: Kopieren Sie die gewünschten Desktop-Dateien in ein nicht standardmäßiges Verzeichnis und setzen Sie den Dex mit dem Befehl darauf


 exec dex -as /path/to/your/dir 

Screenshots


Zwei der Schatullen werden uns dabei helfen. Mit slurp können Sie einen beliebigen rechteckigen Bereich auf dem Bildschirm auswählen und grim macht einen Screenshot davon. In meiner Konfiguration sieht es so aus:


 bindsym Print exec grim ~/Pictures/screen-"$(date +%s)".png bindsym $mod+Print exec grim -g "$(slurp)" ~/Pictures/screen-"$(date +%s)".png 

$mod+PrintScreen - Screenshot eines beliebigen Bereichs, PrintScreen - Screenshot des gesamten Bildschirms.


Screencasts


Wenn Sie einen Screencast in eine Datei schreiben oder in einen RTMP-Stream streamen müssen (z. B. auf Twitch), hilft Ihnen der wf-recorder dabei (unterstützt auch slurp).


Wenn Sie OBS Studio verwenden möchten, gibt es das wlrobs- Plugin dafür.


Die universellste Lösung, die einerseits in KDE und Gnome und andererseits insbesondere in Chrome- und Firefox-Browsern unterstützt wird, ist die Verwendung von Pipewire und der XDG Desktop Portal-Spezifikation. Für sway gibt es die notwendige Ebene xdg-desktop-portal-wlr , obwohl ich die Leistung nicht überprüft habe.


Nachtmodus


Der Nachtmodus besteht darin, die Monitorfarben im Dunkeln durch wärmere zu ersetzen. Wissenschaftler bezweifeln, wie nützlich dies wirklich ist, und Wayland-Entwickler kamen zu dem Schluss, dass die Standardisierung des Gammakorrekturprotokolls aus technischen Gründen unbrauchbar ist.


Trotzdem gefällt mir dieses Feature, und in gewisser Weise ist es auch da. Für den Nachtmodus benötigen wir diese Rotverschiebungsgabel mit Unterstützung des schwankungsspezifischen Protokolls.


Wir installieren es auf irgendeine Weise in der ~/.config/redshift/redshift.conf Konfiguration, wählen das gewünschte Protokoll aus und geben den Längen- und Breitengrad an.


 [redshift] location-provider=manual adjustment-method=wayland [manual] lat=xx.xx lon=yy.yy 

Sperren und Bildschirm ausschalten


Zwei aus einem anderen Sarg kommen hier zur Rettung. swayidle führt die angegebenen Befehle im Timeout aus, wenn keine Aktivität swaylock (oder umgekehrt, das Erscheinungsbild), und swaylock sperrt den Bildschirm und erfordert ein Kennwort. Sie können den Bildschirm ausschalten (oder alle Bildschirme, wenn es mehrere gibt)


 swaymsg "output * dpms off" 

So sieht der Daemon aus, der den Bildschirm nach 300 Sekunden Inaktivität blockiert und nach 600 Sekunden ausschaltet:


 swayidle -w \ timeout 300 'swaylock -f -c 000000' \ timeout 600 'swaymsg "output * dpms off"' \ resume 'swaymsg "output * dpms on"' \ before-sleep 'swaylock -f -c 000000' 

Führen Sie es in irgendeiner Weise aus.


i3blocks


Fertige Blöcke mit Kalender, Netzwerk, Festplattenstatus usw. usw. kann aus dem i3blocks-contrib- Repository ausgeliehen werden. In i3blocks werden sie in der Konfiguration unter ~/.config/i3blocks/config . Beispiel: Ein Block mit Aktualisierungen alle 5 Sekunden nach Wochentag, Datum und Uhrzeit:


 [time] command=date +"%a %d/%m %H:%M" interval=5 

Dies war jedoch ein zu einfaches Beispiel. Tatsächlich haben i3- und Sway-Enthusiasten einen heiligen Gral: Die Titelleiste des aktuellen Fensters wird in der oberen Leiste angezeigt. Lassen Sie uns herausfinden, wie dies erreicht werden kann.


Zunächst lesen wir man sway-ipc und stellen fest, dass Sie dort Veranstaltungen abonnieren können. Das Erforderliche hat den Code 0x80000003. WINDOW 0x80000003. WINDOW und gibt 0x80000003. WINDOW Objekte dieser Struktur zurück:


 { "change" : "focus | title | ...", "container": { focused: true | false, name: "...", ... } } 

In der Tat kann entweder das Fenster selbst seinen Titel change == title ( change == title ) oder wir können den Fokus auf ein anderes Fenster verschieben ( change == focus ). Das Fenster kann jedoch den Titel ändern und unscharf sein. Um solche Ereignisse herauszufiltern, müssen wir die Eigenschaft container.focused überprüfen.


Sie können all diese Logik in Python oder Go beschreiben, aber es gibt einen besseren Weg. swaymsg Sie die gewünschten Ereignisse ganz einfach abonnieren und an stdout ausgeben:


 $ swaymsg -m -t SUBSCRIBE "['window']" 

und wir werden den resultierenden json in jq . Hier ist das Ergebnis, ohne auf die Feinheiten der Abfragesyntax dieses wunderbaren Dienstprogramms einzugehen:


 $ query='select(.change == "focus" or (.change == "title" and .container.focused)) | .container.name' $ swaymsg -m -t SUBSCRIBE "['window']" | jq --unbuffered -r "$query" 

Ein zweizeiliges Skript für die Bash und kein Code mehr! Das Flag --unbuffered benötigt, andernfalls erhält i3blocks keine neuen Zeilen sofort, sondern nur, wenn der Puffer gelöscht wird.


Fügen Sie schließlich den folgenden Block zur i3blocks-Konfiguration hinzu:


 [active_window] command=/path/to/our/script.sh interval=persist 

Hausaufgaben: Lehren Sie grimmig, einen Screenshot des aktuellen Fensters zu machen. Sie sagen, dass solche Dinge in Wayland unmöglich sind, aber die Männer bezweifeln es.


Hausaufgabe 2: Lehren Sie i3blocks, das aktuelle Tastaturlayout als Flagge anzuzeigen. Es gibt einige Blöcke in i3blocks-contrib, die jedoch anstelle einer Flagge Text anzeigen und in Wayland nicht funktionieren.


Andere Programme


Mit der wl-Zwischenablage können Sie über das Terminal mit der Zwischenablage arbeiten, dh sie ersetzt xclip und xsel. Dies ist besonders nützlich für VIM-Benutzer, bei denen das Kopieren / Einfügen mit "+y / "+p beginnt (installieren Sie einfach dieses Paket, es ist keine zusätzliche Konfiguration erforderlich).


ydotool - Ersetzung von xdotool.


waypipe - Proxy für Netzwerktransparenz. Um ehrlich zu sein, ich kann mich nicht erinnern, wann jemand in Fachforen das letzte Mal eine Frage zu dieser Funktion gestellt hat. Vielleicht benutzen sie es gar nicht? Ich - definitiv nicht.


KDE Connect Fügen org.kde.kdeconnect.nonplasma.desktop Datei org.kde.kdeconnect.nonplasma.desktop zur org.kde.kdeconnect.nonplasma.desktop (siehe vorherige Abschnitte), installieren Sie KDE Connect auf Ihrem Smartphone und konfigurieren Sie deren Verbindung - und Sie können die Musik- und Videowiedergabe von Ihrem Smartphone in einem Browser mit dem Plasma-Integrations- Plugin in vlc steuern , in der kantate , im mpv mit dem mpv-mpris plugin , und auch in mako mitteilungen erhalten. Mein Respekt vor dem KDE-Projekt für die Entwicklung von Programmen, die nicht an ihr Ökosystem gebunden sind.


Fazit


Sie können endlos darüber schreiben, wie Sie all dies einrichten (insbesondere das i3blocks-Bedienfeld), aber es ist besser, hier anzuhalten. Folgendes habe ich bekommen:



Gehe auch zum Subreddit / r / unixporn und staune, was die Leute machen. (95% von allem, was dort ausgelegt ist, sieht wunderschön aus, ist aber grundsätzlich nicht für die tägliche Arbeit geeignet :)).

Source: https://habr.com/ru/post/de484378/


All Articles