مرحبا بالجميع. في هذه المقالة ، سوف أصف تجربتي في إعداد واستخدام sway ، مدير النوافذ المتراكم لنظام Linux.
ما هو ولماذا هو مطلوب؟
رسميا ، التأثير هو مدير نوافذ تبليط ، بديلا شفافا عن i3wm ، ويعمل على قمة وايلاند.
Weiland ، ويعرف أيضًا باسم Wölund ، إلخ. - شخصية من الأساطير الألمانية القديمة والقديمة الإسكندنافية ، وهو كتاب كُتب عنه في وقت ما عالم الفولكلورسي جيسي ويستون. الان انت تعرف.
ومع ذلك ، في رأيي ، السمة الرئيسية للتأثير هو أنه منشئ ، مع كل مزايا وعيوب هذا النهج. إذا كنت تحب Vim (التشابه بينها يتفاقم بسبب الاتجاه نحو استخدام لوحة المفاتيح) و Archlinux ومشاريع مشابهة ، فإنني أنصحك أن تدقق في التأثير. رأيي الشخصي هو أنه بمجرد قضاء المزيد من الوقت في إعداده ، ستحصل على بيئة مريحة للغاية ومريحة لك شخصيًا ، ولن يحدث فيها شيء غير متوقع.
إذا كانت مساوئ النفوذ و Wayland (مثل عدم وجود دعم لبرامج تشغيل NVidia الخاصة والحاجة إلى البحث عن نظائرها للعديد من البرامج المألوفة) قاتلة بالنسبة لك ، فإنني أنصحك أن تنتبه إلى x3 i3wm. ستكون أجزاء المنشئ مختلفة تمامًا ، سيتعين عليك تثبيت xinit ، وتكوين مختلف .Xauthority ، فمن الممكن التعامل مع التمزيق ، ولكن المنطق العام للنظام هو نفسه تمامًا.
تركيب
ربما تكون Sway في مستودعات التوزيع الخاصة بك. ومع ذلك ، إذا كنت ترغب في تثبيت إصدار أحدث ، فهو بسيط للغاية. تحتوي صفحة مشروع github على قائمة ضئيلة من التبعيات الخاصة بها. wlroots
، استنساخ مستودع ، استنساخ wlroots
إلى مجلد subprojects
:
hub clone swaywm/sway hub clone swaywm/wlroots sway/subprojects/wlroots
(هنا يمكنني استخدام لوحة وصل . أداة غير قياسية ، ولكنها مريحة للغاية). بعد ذلك ، يمكنك تكوين وبناء:
meson setup ./sway-build ./sway --buildtype=minsize ninja -C ./sway-build doas ninja -C ./sway-build install
doas هو بديل sudo خفيف الوزن من مطوري OpenBSD. يستخدم Linux عادةً شوكة OpenDoas.
إطلاق
إذا كنت ترغب في تشغيل التأثير من سطر الأوامر دون استخدام مديرين مثل SDDM ، فإن الطريقة الصحيحة الوحيدة للقيام بذلك هي
$ exec sway
إذا قمت بتشغيل التأثير دون تنفيذ ، وقم بإغلاق الشاشة مع تعطل التأثير ، فسيتم إعادتك إلى سطر الأوامر. القفل سيكون عديم الفائدة.
ملاحظة لمشجعي systemd: التأثير لا يتطلب systemd-logind ولا elogind. صحيح ، في هذه الحالة ، سيكون عليك ضبط قدرات suid bit أو تهيئة القدرات. انظر الويكي .
متغيرات البيئة
هناك العديد من الأماكن التي أوصي بها.
برنامج شل في ~/.local/bin/sway
- للمتغيرات الخاصة بالسيطرة. على سبيل المثال ، أريد أن لا تعرض تطبيقات Qt المشهد واستخدام السمة من qt5ct
:
#!/bin/bash QT_QPA_PLATFORMTHEME=qt5ct \ QT_WAYLAND_DISABLE_WINDOWDECORATION=1 \ /usr/bin/sway
~/.pam_environment
- للمتغيرات التي أريد إتاحتها على الفور في جلسة مستخدم systemd. مثال:
SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh"
ومع ذلك ، قم بتغيير هذا الملف بحذر ، خاصة إذا كنت تستخدم بيئات أخرى. على سبيل المثال ، لن يعجب KDE Plasma كثيرًا إذا اكتشف $WAYLAND_DISPLAY
(ومن المفارقات أن وحدة pam_env
هذا الملف تم إنشاؤها منذ N سنوات في المقام الأول لتعيين متغير $DISPLAY
).
~/.bashrc
- لجميع الحالات الأخرى.
سيطر الإعداد
دخول
كل شيء بسيط للغاية في نظامي: نقوم بتثبيت تخطيطات روسية وإنجليزية ونتحول بينهما بواسطة Alt+Shift
. في صيغة التأثير ، يبدو كما يلي:
input * { xkb_layout us,ru xkb_options grp:alt_shift_toggle }
يستخدم Sway مكتبة libinput
للإدخال ، مثل KDE و Gnome. لذلك ، لدينا العديد من الخيارات المتاحة. إعدادات لوحة اللمس ، التمرير الطبيعي ، تسارع مؤشر الماوس ، إلخ. إلخ يمكن فحص قائمة الخيارات في man sway-input
، وقائمة أجهزة الإدخال في إخراج الأمر
swaymsg -t get_inputs
ومع ذلك ، أود أن ألفت الانتباه إلى فرصة واحدة مثيرة للاهتمام. إذا كنت تنتقل من بيئة X ، يمكنك ببساطة نقل إعدادات لوحة المفاتيح من هناك. قم بتشغيل الأمر في هذه البيئة
$ xkbcomp $DISPLAY /path/to/keymap.xkb
وفي سجل التكوين التأثير
input * { xkb_file /path/to/keymap.xkb }
مفاتيح الاختصار
يتم تعيين مفاتيح الاختصار ، مثل كل شيء آخر في التأثير ، في التكوين. هناك 3 أوامر لتحديدها:
bindswitch
. يتم تنفيذها عند فتح / إغلاق غطاء الكمبيوتر المحمول ، والتحول إلى وضع الكمبيوتر اللوحي ، إلخ.bindcode
. يتم تنفيذه عند الضغط على مفتاح مع الكود المحدد. لا يعتمد على التصميم الحالي ، وهو مفيد بشكل خاص لمفاتيح الوسائط المتعددة.bindsym
. يعتمد الطابع الحالي الذي تم إدخاله على التخطيط. ومع ذلك ، إذا أضفت --to-code
، فسيتم تحويل هذا الحرف ضمنيًا إلى الكود المقابل للتخطيط الأول من xkb_layout
(انظر إعدادات الإدخال).
على سبيل المثال ، سيتغلب مفتاح الاختصار هذا على النافذة الحالية بغض النظر عن التصميم:
bindsym --to-code $mod+Shift+q kill
يمكنك قراءة المزيد حول هذه المعلمات في mana: man 5 sway
.
لتحديد ما تم الضغط عليه بسهولة ، كتب مؤلف التأثير كلوغر خاص (يحتاج إلى حقوق الجذر للعمل ، لذلك لا داعي للقلق بشأن الأمان).
استنتاج
يمكن الحصول على قائمة بأجهزة الإخراج المتاحة باستخدام الأمر
swaymsg -t get_outputs
في التهيئة لكل منها ، يمكنك ضبط وضع الفيديو ، والقياس (بما في ذلك الكسر) ، والصورة ، والتناوب ، إلخ. أبسط التكوين يشبه هذا:
output HDMI-A-1 mode 1920x1080@60Hz output * bg /path/to/wallpaper.jpg fill
يمكن العثور على قائمة كاملة من الخيارات في mana man sway-output
mana.
يوجد أيضًا برنامج wlr-randr يمكن من خلاله تعيين كل هذا من سطر الأوامر (أي أنه يشبه XRandr لـ Wayland).
Swaybar
Swaybar - لوحة يتم عرض معلومات الحالة عليها. التاريخ والوقت ودرج النظام ، إلخ. إلخ عادةً ما تقضي مشجعي i3 و sway معظم الوقت في إعداد هذه اللوحة المحددة (أو اللوحات ، قد يكون هناك عدة). شخصيا ، لدي ما يكفي من هذا ، على مقربة من الحد الأدنى من التكوين:
bar { position top colors { statusline #ffffff background #282828E6 inactive_workspace #282936BF #282936BF #5c5c5c } font Hack 11 status_command i3blocks }
هناك العديد من الخيارات لضبط الموضع والألوان والخطوط والدرج ، إلخ. يمكنك أن man 5 sway-bar
عنها في mana - man 5 sway-bar
.
تلتزم Swaybar بقراءة وتحليل json بتنسيق i3bar ، والإخراج حسب status_command
. هناك العديد من البرامج التي يمكن استخدامها هنا. i3status و waybar و i3status-rs والعديد من المشاريع الأخرى. أنا شخصياً أفضل i3blocks بسبب بساطة التكوين وسهولة إضافة كتل مخصصة.
إعداد التطبيق
إشعار
يمكن القيام بذلك بواسطة البرنامج الخفي mako (على الأرجح يوجد في التوزيع الخاص بك). هناك يمكنك أيضًا ضبط الألوان ، إلخ ، ولكن هذا كل شيء اختياري. فقط قم بتشغيله وسيعمل.
تطبق Mako مواصفات إعلامات سطح المكتب XDG المستندة إلى dbus. يدعمها العديد من البرامج ، بما في ذلك Chromium و Firefox و Telegram.
المحاكي الطرفي
في بيئات مثل KDE ، يستخدم Plasma عادةً برامج محاكاة مدمجة تعرض القوائم وعلامات التبويب والعديد من عناصر التصميم الأخرى. ولكن لماذا كل هذا في التأثير؟ أنا أفضل Alacritty - سريع جدا بفضل استخدام محاكي GPU ، بالمناسبة المكتوبة في Rust. أضفت مفاتيح الاختصار هذه إلى قسم key_bindings في ملف التكوين الخاص به ( ~/.config/alacritty/alacritty.yml
):
- { key: T, mods: Control|Shift, action: SpawnNewInstance }
افتح نافذة جديدة مع الدليل الحالي. بديل رائع لعلامات التبويب ، وسيهتم التأثير على التصميم.
- { key: Up, mods: Control|Shift, action: ScrollLineUp, mode: ~Alt } - { key: Down, mods: Control|Shift, action: ScrollLineDown, mode: ~Alt }
التمرير لأعلى / لأسفل خط.
نكتب في التكوين التأثير
set $term alacritty bindsym $mod+Return exec $term
Alacritty لا يدعم الحروف المركبة ، لأنها تؤثر على سرعة التقديم. إذا كنت لا تزال في حاجة إليها ، فاحرص على كيتي - فهذا المحاكي سريع جدًا أيضًا ، وهناك فقط عدد مخيف من الميزات والإعدادات الموجودة أسفل الغطاء.
إطلاق التطبيقات
عادة ما يتم تشغيل التطبيقات في التأثير باستخدام قائمة hotkey. في التكوين يكتبون شيء من هذا القبيل
set $menu ... bindsym --to-code $mod+d exec $menu
هناك العديد من البرامج لعرض القائمة. يحتاج البعض ، مثل dmenu أو rofi ، إلى XWayland. من بين الذين يعملون تحت Wayland يمكننا التمييز بين bemenu وحتى krunner (ما يظهر في KDE بواسطة Alt+F2
. نعم ، هذا برنامج مستقل).
ومع ذلك ، فإنني أفضل حل عالمي أكثر ، ألا وهو سطح المكتب . على الرغم من الاسم ، فإنه لا يعتمد على التأثير وبشكل عام ليس برنامج واجهة المستخدم الرسومية ، ولكن البرنامج النصي shell صغير يعمل في وحدة التحكم. يشكل هذا البرنامج النصي قائمة من البرامج في $PATH
، وملفات سطح المكتب المثبتة (وفقًا لمواصفات XDG Desktop Entry) وربما مصادر إضافية (تم تكوينها في التكوين). يتم استخدام الأداة المساعدة fzf
الرائعة لعرض القائمة والبحث فيها - الانتباه إليها.
وبالتالي ، لعرض القائمة ، نحتاج إلى فتح نافذة طرفية مع هذا البرنامج. مع alacritty ، يتم ذلك مثل هذا:
set $menu exec alacritty -e sway-launcher-desktop bindsym --to-code $mod+d exec $menu
قد ترغب في جعل هذه النافذة تطفو افتراضيًا. في i3 و sway ، يتم تكوين مثل هذه القواعد في التكوين باستخدام التوجيه for_window
. لتخطيط القاعدة لإطار sway-launcher-desktop
، يجب تعيين فئة فريدة من نوعها ، بالنسبة لي هي Launcher
فقط. ضع في اعتبارك أنه نظرًا لاستخدام Wayland ، فإن المعايير المدرجة في دليل i3 ليست مناسبة للتأثير. يمكن العثور على تلك الصحيحة في man 5 sway
، قسم CRITERIA
. في هذه الحالة ، app_id
مناسب تمامًا ، ويبدو التكوين النهائي كما يلي:
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
تطبيقات التشغيل التلقائي
من حيث المبدأ ، لتشغيل البرنامج تلقائيًا ، يمكنك ببساطة الكتابة
exec /path/to/program
في التكوين التأثير ، أو حتى إنشاء وحدة systemd مخصصة. ومع ذلك ، في هذه المقالة ، سأستخدم مواصفات XDG Autostart المعتمدة من قبل KDE و Gnome.
المواصفات هي تشغيل ملفات سطح المكتب الموجودة في الدلائل /etc/xdg/autostart
و ~/.config/autostart
. وكقاعدة عامة ، تأتي هذه الملفات في حزم مع برامج ، لكنها سهلة الإنشاء.
هذا هو المكان الذي يظهر فيه جوهر وحدات التأثير. Sway نفسه لا يعرف شيئًا عن تشغيل XDG تلقائيًا ، ولا إدخال XDG Desktop Entry. علاوة على ذلك ، فإن مطوريها لا يحبون هذه المواصفات وجميع المواصفات المماثلة. ومع ذلك ، فإن الأداة المساعدة لوحدة التحكم dex قادرة على إدارتها (على الأرجح ، في مستودع التوزيع الخاص بك).
للتحقق مما سيكون في التشغيل التلقائي ، اكتب الأمر
$ dex -ade Sway
يعني التشغيل التلقائي ، d
- "التشغيل الجاف" ، -e Sway
يعين اسم البيئة (يمكن أن يكون أي) ويستخدم للتصفية.
على الأرجح ، فإن القائمة الناتجة لن تناسبك. على سبيل المثال ، حصلت kgpg
. نتابع ما يلي: انسخ ملف سطح المكتب المقابل من /etc/xdg/autostart
إلى ~/.config/autostart
، أضف السطر هناك
NotShowIn=Sway
وتحقق التشغيل التلقائي مرة أخرى. قد لا ترغب العديد من البرامج (خاصة تلك المكتوبة في Electron) في تشغيل برنامج Wayland. نحن نفعل الشيء نفسه معهم. نقوم بنسخ ملف سطح المكتب وتغيير خط الإطلاق هناك. كان:
Exec=/usr/bin/skypeforlinux
وقيل:
Exec=env GDK_BACKEND=x11 /usr/bin/skypeforlinux
يمكن تطبيق نفس التقنية على سطح المكتب - sway-launcher من الفقرة السابقة. عند حل جميع المشكلات ، أضف السطر إلى تهيئة التأثير
exec dex -ae Sway
أو يمكنك القيام بعكس ذلك: قم بنسخ ملفات سطح المكتب المطلوبة إلى دليل غير قياسي وتعيين dex عليه باستخدام الأمر
exec dex -as /path/to/your/dir
لقطات
اثنان من النعش سوف يساعدنا في هذا. يسمح لك slurp بتحديد منطقة مستطيلة تعسفية على الشاشة ، ويجعل الكئيب لقطة شاشة منه. في التكوين الخاص بي ، يبدو هذا كالتالي:
bindsym Print exec grim ~/Pictures/screen-"$(date +%s)".png bindsym $mod+Print exec grim -g "$(slurp)" ~/Pictures/screen-"$(date +%s)".png
$mod+PrintScreen
- لقطة شاشة لمنطقة عشوائية ، PrintScreen
- لقطة شاشة للشاشة بأكملها.
قطات للشاشة
إذا كنت بحاجة إلى كتابة سجل على ملف أو دفقه إلى دفق RTMP (على سبيل المثال ، على Twitch) ، فسوف يساعدك wf-recorder في هذا (كما يدعم slurp).
إذا كنت تريد استخدام OBS Studio ، فهناك ملحق wlrobs لهذا الغرض.
ومع ذلك ، فإن الحل الأكثر عالمية المدعومة من ناحية في KDE و Gnome ، ومن ناحية أخرى ، لا سيما في متصفحي Chrome و Firefox ، هو استخدام مواصفات Pipewire و XDG Desktop Portal. للتأثير ، هناك طبقة xdg-desktop-portal-wlr اللازمة ، على الرغم من أنني لم أتحقق من أدائها.
الوضع الليلي
يتكون الوضع الليلي من استبدال ألوان الشاشة بألوان أكثر دفئًا في الظلام. يشك العلماء في مدى فائدة هذا الأمر حقًا ، وقد قرر مطورو Wayland أن توحيد بروتوكول تصحيح غاما كان عديم الفائدة لأسباب فنية.
ومع ذلك ، أنا أحب هذه الميزة ، وفي التأثير هو أيضا هناك. بالنسبة للوضع الليلي ، نحتاج إلى مفترق الطرق الأحمر هذا مع دعم للبروتوكول الخاص بالتأثير.
نحن تثبيته بأي شكل من الأشكال ، في التكوين ~/.config/redshift/redshift.conf
، حدد البروتوكول المطلوب وتحديد الطول والعرض.
[redshift] location-provider=manual adjustment-method=wayland [manual] lat=xx.xx lon=yy.yy
قفل وشاشة قبالة
اثنان من النعش آخر يأتي لانقاذ هنا. يدير swayidle
الأوامر المحددة في مهلة إذا لم يكن هناك أي نشاط (أو العكس ، مظهره) ، swaylock
قفل الشاشة ويتطلب كلمة مرور. يمكنك إيقاف تشغيل الشاشة (أو جميع الشاشات ، إذا كان هناك العديد من)
swaymsg "output * dpms off"
إليك ما سيبدو عليه البرنامج الخفي ، حيث يقوم بحجب الشاشة بعد 300 ثانية من عدم النشاط وإيقافها بعد 600:
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'
تشغيله بأي شكل من الأشكال.
i3blocks
كتل جاهزة الصنع مع تقويم وشبكة وحالة قرص ، إلخ. إلخ يمكن استعارتها من مستودع i3blocks-المساهمة . في i3blocks تضاف في التكوين في ~/.config/i3blocks/config
. على سبيل المثال ، كتلة مع التحديثات كل 5 ثوان بحلول يوم الأسبوع والتاريخ والوقت:
[time] command=date +"%a %d/%m %H:%M" interval=5
ولكن هذا كان مثال بسيط للغاية. في الواقع ، يتمتع عشاق i3 و sway بالكثير المقدس: عرض شريط العنوان للإطار الحالي في الشريط العلوي. دعونا معرفة كيفية تحقيق ذلك.
بادئ ذي بدء ، نبدأ في قراءة man sway-ipc
ونجد أنه يمكنك الاشتراك في الأحداث هناك. المطلوب لديه رمز 0x80000003. WINDOW
0x80000003. WINDOW
وإرجاع كائنات json من هذا الهيكل:
{ "change" : "focus | title | ...", "container": { focused: true | false, name: "...", ... } }
في الواقع ، إما أن النافذة نفسها يمكنها تغيير عنوانها ( change == title
) ، أو يمكننا نقل التركيز إلى نافذة أخرى ( change == focus
). ومع ذلك ، قد تغير النافذة العنوان وخارجه. لتصفية مثل هذه الأحداث ، يجب علينا التحقق من خاصية container.focused
.
يمكنك وصف كل هذا المنطق في Python أو Go ، ولكن هناك طريقة أفضل. swaymsg
يجعل من السهل الاشتراك في الأحداث المرغوبة swaymsg
إلى stdout:
$ swaymsg -m -t SUBSCRIBE "['window']"
وسوف نقوم بمعالجة json الناتجة في jq. دون الخوض في التفاصيل الدقيقة لبناء جملة الاستعلام لهذه الأداة المساعدة الرائعة ، إليك النتيجة:
$ query='select(.change == "focus" or (.change == "title" and .container.focused)) | .container.name' $ swaymsg -m -t SUBSCRIBE "['window']" | jq --unbuffered -r "$query"
سيناريو من سطرين على باش ، وليس أكثر من رمز! هناك حاجة إلى علامة - --unbuffered
، وإلا لن تتلقى i3blocks خطوط جديدة على الفور ، ولكن فقط عندما يتم مسح المخزن المؤقت.
أخيرًا ، أضف الكتلة التالية إلى تكوين i3blocks:
[active_window] command=/path/to/our/script.sh interval=persist
الواجبات المنزلية: تعليم قاتمة لاتخاذ لقطة من النافذة الحالية. يقولون أن مثل هذه الأشياء مستحيلة في وايلاند ، لكن الرجال يشكون في ذلك.
الواجب المنزلي 2: علم i3blocks لعرض تخطيط لوحة المفاتيح الحالي كعلم. هناك بضعة كتل في i3blocks-المساهمة ، لكنها تظهر النص بدلاً من العلم ولا تعمل في Wayland.
برامج اخرى
يسمح لك wl-clipboard بالعمل مع الحافظة من الجهاز ، أي أنه يحل محل xclip و xsel. إنه مفيد بشكل خاص لمستخدمي vim ، حيث يبدأ النسخ / اللصق باستخدام "+y
/ "+p
(فقط قم بتثبيت هذه الحزمة ، لا يلزم تكوين إضافي).
ydotool - استبدال xdotool.
waypipe - وكيل لشفافية الشبكة. لكي أكون أمينًا ، لا أتذكر آخر مرة قام فيها شخص ما بطرح سؤال يتعلق بهذه الميزة في المنتديات المتخصصة. ربما لا يستخدمونها على الإطلاق؟ أنا - بالتأكيد لا.
كيدي كونيكت إضافة ملف org.kde.kdeconnect.nonplasma.desktop
إلى org.kde.kdeconnect.nonplasma.desktop
(انظر الأقسام السابقة) ، قم بتثبيت KDE Connect على الهاتف الذكي الخاص بك وتكوين اتصالها - ويمكنك التحكم في تشغيل الموسيقى والفيديو من هاتفك الذكي في متصفح مع البرنامج المساعد لتكامل البلازما ، في vlc ، في cantata ، في mpv مع البرنامج المساعد mpv-mpris ، وكذلك تلقي الإخطارات في mako. احترامي لمشروع KDE لتطوير البرامج التي لم يتم تسميتها في نظامها البيئي.
استنتاج
يمكنك الكتابة عن إعداد كل هذا (وخاصة لوحة i3blocks) إلى ما لا نهاية ، ولكن من الأفضل أن تتوقف هنا. إليك ما حصلت عليه:

انتقل أيضًا إلى subreddit / r / unixporn وتتعجب مما يفعله الناس. (ومع ذلك ، فإن 95٪ من كل الأشياء المعروضة هناك تبدو جميلة ، ولكنها ليست مناسبة تمامًا للعمل اليومي :)).