Halo semuanya. Pada artikel ini, saya akan menjelaskan pengalaman saya dalam mengatur dan menggunakan sway, manajer jendela ubin untuk Linux.
Apa itu dan mengapa itu dibutuhkan?
Secara resmi, sway adalah manajer jendela ubin, pengganti transparan untuk i3wm, yang bekerja di atas Wayland.
Weiland, alias Wรถlund, dll. - Karakter dari mitologi Old German dan Old Norse, sebuah buku yang pada suatu waktu ditulis oleh penulis cerita rakyat Inggris Jessie Weston. Sekarang kamu tahu.
Namun, menurut pendapat saya, fitur utama sway adalah konstruktor, dengan semua kelebihan dan kekurangan dari pendekatan ini. Jika Anda menyukai Vim (kemiripannya dengan diperburuk oleh orientasi pada penggunaan keyboard), Archlinux dan proyek serupa, maka saya menyarankan Anda untuk melihat lebih dekat pada goyangan. Pendapat pribadi saya adalah bahwa sekali Anda menghabiskan lebih banyak waktu menyiapkannya, Anda akan mendapatkan lingkungan yang sangat stabil dan nyaman bagi Anda secara pribadi, di mana tidak ada yang tidak terduga akan terjadi.
Jika kerugian dari goyangan dan Wayland (seperti kurangnya dukungan untuk driver pribadi NVidia dan kebutuhan untuk mencari analog untuk banyak program yang akrab) nampaknya fatal bagi Anda, saya menyarankan Anda untuk memperhatikan x3 i3wm. Bagian-bagian konstruktor akan benar-benar berbeda, Anda harus menginstal xinit, mengkonfigurasi berbagai .Xauthority, adalah mungkin untuk berurusan dengan merobek, tetapi logika umum dari sistem persis sama.
Instalasi
Goyangan mungkin dalam repositori distribusi Anda. Namun, jika Anda ingin menginstal versi yang lebih baru, maka itu sangat sederhana. Halaman proyek github memiliki sedikit daftar dependensinya. Instal mereka, klon repositori, klon wlroots
ke folder subprojects
:
hub clone swaywm/sway hub clone swaywm/wlroots sway/subprojects/wlroots
(di sini saya menggunakan hub . Alat non-standar, tetapi sangat nyaman). Setelah itu, Anda dapat mengonfigurasi dan membuat:
meson setup ./sway-build ./sway --buildtype=minsize ninja -C ./sway-build doas ninja -C ./sway-build install
doas adalah pengganti sudo ringan dari pengembang OpenBSD. Linux biasanya menggunakan garpu OpenDoas.
Luncurkan
Jika Anda ingin menjalankan goyangan dari baris perintah tanpa menggunakan manajer seperti SDDM, maka satu-satunya cara yang tepat untuk melakukan ini adalah
$ exec sway
Jika Anda menjalankan sway tanpa exec
, mengunci layar dengan swaylock, dan sway crash, Anda akan terlempar kembali ke baris perintah. Kunci tidak akan berguna.
Catatan untuk penggemar systemd: sway tidak membutuhkan systemd-logind atau elogind. Benar, dalam hal ini Anda harus mengatur bit suid atau mengkonfigurasi kemampuan. Lihat wiki .
Variabel lingkungan
Ada beberapa tempat di mana saya meresepkannya.
Script shell di ~/.local/bin/sway
- untuk variabel yang spesifik untuk diayunkan. Sebagai contoh, saya ingin aplikasi Qt tidak menampilkan pemandangan dan menggunakan tema dari qt5ct
:
#!/bin/bash QT_QPA_PLATFORMTHEME=qt5ct \ QT_WAYLAND_DISABLE_WINDOWDECORATION=1 \ /usr/bin/sway
~/.pam_environment
- untuk variabel yang saya ingin segera sediakan di sesi pengguna systemd. Contoh:
SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh"
Namun, ubah file ini dengan hati-hati, terutama jika Anda menggunakan lingkungan lain. Sebagai contoh, KDE Plasma tidak akan menyukainya jika mendeteksi $WAYLAND_DISPLAY
(ironisnya, modul pam_env
file ini dibuat N tahun yang lalu terutama untuk mengatur variabel $DISPLAY
).
~/.bashrc
- untuk semua kasus lainnya.
Pengaturan goyangan
Masuk
Semuanya cukup sederhana di sistem saya: kami menginstal tata letak Rusia dan Inggris dan beralih di antara mereka dengan Alt+Shift
. Di goyangan konfigurasi, terlihat seperti ini:
input * { xkb_layout us,ru xkb_options grp:alt_shift_toggle }
Sway menggunakan perpustakaan libinput
untuk input, sama seperti KDE dan Gnome. Jadi, kami memiliki banyak opsi yang tersedia. Pengaturan touchpad, pengguliran alami, akselerasi pointer mouse, dll. dll. Daftar opsi dapat diperiksa dalam man sway-input
, dan daftar perangkat input dalam output perintah
swaymsg -t get_inputs
Namun, saya ingin menarik perhatian pada satu kesempatan menarik. Jika Anda pindah dari lingkungan X, Anda cukup mentransfer pengaturan keyboard dari sana. Jalankan perintah di lingkungan ini
$ xkbcomp $DISPLAY /path/to/keymap.xkb
dan dalam register konfigurasi goyang
input * { xkb_file /path/to/keymap.xkb }
Tombol cepat
Tombol cepat, seperti segala sesuatu yang lain dalam pengaturan, diatur dalam konfigurasi. Ada 3 perintah untuk mendefinisikannya:
bindswitch
. Ini dilakukan saat membuka / menutup tutup laptop, beralih ke mode tablet, dll.bindcode
. Ini dijalankan ketika kunci dengan kode yang ditentukan ditekan. Itu tidak tergantung pada tata letak saat ini, terutama berguna untuk tombol multimedia.bindsym
Karakter saat ini yang dimasukkan tergantung pada tata letak. Namun, jika Anda menambahkan parameter --to-code
, karakter ini akan secara implisit dikonversi ke kode yang sesuai untuk tata letak pertama dari xkb_layout
(lihat pengaturan input).
Misalnya, hotkey seperti itu akan mengalahkan jendela saat ini terlepas dari tata letak:
bindsym --to-code $mod+Shift+q kill
Anda dapat membaca lebih lanjut tentang parameter ini di mana: man 5 sway
.
Untuk dengan mudah menentukan apa yang ditekan, penulis sway menulis keylogger khusus (ia membutuhkan hak root untuk bekerja, sehingga tidak perlu khawatir tentang keamanan).
Kesimpulan
Daftar perangkat output yang tersedia dapat diperoleh dengan perintah
swaymsg -t get_outputs
Dalam konfigurasi untuk masing-masing, Anda dapat mengatur mode video, penskalaan (termasuk fraksional), gambar, rotasi, dll. Konfigurasi paling sederhana terlihat seperti ini:
output HDMI-A-1 mode 1920x1080@60Hz output * bg /path/to/wallpaper.jpg fill
Daftar opsi lengkap dapat ditemukan di man sway-output
mana.
Ada juga program wlr-randr di mana semua ini dapat diatur dari baris perintah (yaitu, ini adalah analog dari XRandr untuk Wayland).
Swaybar
Swaybar - panel tempat informasi status ditampilkan. Tanggal, waktu, baki sistem, dll. dll. Biasanya penggemar i3 dan goyangan menghabiskan waktu paling banyak menyiapkan panel khusus ini (atau panel, mungkin ada beberapa). Secara pribadi, saya sudah cukup dengan ini, dekat dengan konfigurasi minimum:
bar { position top colors { statusline #ffffff background #282828E6 inactive_workspace #282936BF #282936BF #5c5c5c } font Hack 11 status_command i3blocks }
Ada banyak opsi untuk menyesuaikan posisi, warna, font, baki, dll. Anda dapat man 5 sway-bar
tentang mereka di mana - man 5 sway-bar
.
Swaybar berkomitmen untuk membaca dan mem-parsing json dalam format i3bar, keluaran oleh status_command
. Ada banyak program yang bisa digunakan di sini. i3status , waybar , i3status-rs , dan banyak proyek lainnya. Secara pribadi, saya lebih suka i3block karena kesederhanaan konfigurasi dan kemudahan menambahkan blok khusus.
Pengaturan Aplikasi
Notifikasi
Ini dapat dilakukan oleh daemon mako (kemungkinan besar ada dalam distribusi Anda). Di sana Anda juga dapat menyesuaikan warna, dll., Tetapi ini semua opsional. Jalankan saja dan itu akan berhasil.
Mako mengimplementasikan spesifikasi Notifikasi Desktop XDG berbasis dbus. Ini didukung oleh banyak program, termasuk Chromium, Firefox dan Telegram.
Terminal emulator
Dalam lingkungan seperti KDE, Plasma biasanya menggunakan emulator built-in yang menampilkan menu, tab, dan banyak elemen desain lainnya. Tapi mengapa semua ini bergoyang? Saya lebih suka Alacritty - sangat cepat berkat penggunaan emulator GPU, dengan cara yang ditulis dalam Rust. Saya menambahkan tombol pintas ke bagian key_bindings di config-nya ( ~/.config/alacritty/alacritty.yml
):
- { key: T, mods: Control|Shift, action: SpawnNewInstance }
buka jendela baru dengan direktori saat ini. Pengganti tab yang bagus, dan goyangan akan mengatur tata letaknya.
- { key: Up, mods: Control|Shift, action: ScrollLineUp, mode: ~Alt } - { key: Down, mods: Control|Shift, action: ScrollLineDown, mode: ~Alt }
gulir ke atas / bawah garis.
Kami menulis di goyangan konfigurasi
set $term alacritty bindsym $mod+Return exec $term
Alacritty tidak mendukung ligatur, karena mereka mempengaruhi kecepatan rendering. Jika Anda masih membutuhkannya, perhatikan kitty - emulator ini juga sangat cepat, dan hanya ada sejumlah fitur dan pengaturan yang menakutkan di bawah tenda.
Luncurkan aplikasi
Aplikasi yang sedang bergoyang biasanya diluncurkan menggunakan menu hotkey. Dalam konfigurasi mereka menulis sesuatu seperti
set $menu ... bindsym --to-code $mod+d exec $menu
Ada banyak program untuk menampilkan menu. Beberapa, seperti dmenu atau rofi , membutuhkan XWayland. Di antara mereka yang bekerja di bawah Wayland kita dapat membedakan bemenu dan bahkan krunner (apa yang muncul di KDE oleh Alt+F2
. Ya, ini adalah program independen).
Namun, saya lebih suka solusi yang lebih universal, yaitu sway-launcher-desktop . Meskipun namanya, itu tidak tergantung pada goyangan dan secara umum bukan program GUI, tetapi skrip shell kecil yang bekerja di konsol. Skrip ini membentuk menu dari program dalam $PATH
, file desktop yang diinstal (sesuai dengan spesifikasi Entri Desktop XDG) dan mungkin sumber tambahan (dikonfigurasi dalam konfigurasi). Utilitas fzf
luar fzf
digunakan untuk menampilkan dan mencari menu - perhatikan itu.
Jadi, untuk menampilkan menu, kita perlu membuka jendela terminal dengan program ini. Dengan alacritty, ini dilakukan seperti ini:
set $menu exec alacritty -e sway-launcher-desktop bindsym --to-code $mod+d exec $menu
Anda mungkin ingin membuat jendela ini mengambang secara default. Di i3 dan goyangan, aturan seperti itu dikonfigurasi dalam konfigurasi menggunakan direktif for_window
. Untuk memetakan aturan ke jendela sway-launcher-desktop
, perlu diberi beberapa kelas unik, bagi saya itu hanya Launcher
. Perlu diingat bahwa karena penggunaan Wayland, kriteria yang tercantum dalam manual i3 tidak cocok untuk bergoyang. Yang benar dapat ditemukan di man 5 sway
, bagian CRITERIA
. Dalam hal ini, app_id
sangat cocok, dan konfigurasi terakhir terlihat seperti ini:
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
Aplikasi autostart
Pada prinsipnya, untuk memulai kembali program secara otomatis, Anda cukup menulis
exec /path/to/program
dalam konfigurasi goyang, atau bahkan membuat unit systemd kustom. Namun, dalam artikel ini saya akan menggunakan spesifikasi Autostart XDG yang diadopsi oleh KDE dan Gnome.
Spesifikasi ini adalah untuk menjalankan file desktop yang berada di direktori /etc/xdg/autostart
dan ~/.config/autostart
. Biasanya, file-file ini datang dalam paket dengan program, tetapi mudah dibuat sendiri.
Di sinilah esensi modular goyangan memanifestasikan dirinya. Sway sendiri tidak tahu apa-apa tentang Autostart XDG, atau XDG Desktop Entry. Selain itu, pengembangnya secara aktif tidak menyukai ini dan semua spesifikasi serupa. Namun, utilitas konsol dex dapat mengelolanya (kemungkinan besar, itu ada dalam repositori distribusi Anda).
Untuk memeriksa apa yang akan ada dalam autorun, ketik perintah
$ dex -ade Sway
a
berarti autostart, d
- "dry run", -e Sway
menetapkan nama lingkungan (dapat berupa apa saja) dan digunakan untuk penyaringan.
Kemungkinan besar, daftar yang dihasilkan tidak cocok untuk Anda. Misalnya, saya mendapat kgpg
. Kami melanjutkan sebagai berikut: salin file desktop yang sesuai dari /etc/xdg/autostart
ke ~/.config/autostart
, tambahkan baris di sana
NotShowIn=Sway
dan periksa autorun lagi. Banyak program (terutama yang ditulis dalam Electron) mungkin tidak suka dijalankan di bawah Wayland. Kami melakukan hal yang sama dengan mereka. Kami menyalin file desktop dan mengubah jalur peluncuran di sana. Itu:
Exec=/usr/bin/skypeforlinux
menjadi:
Exec=env GDK_BACKEND=x11 /usr/bin/skypeforlinux
teknik yang sama dapat diterapkan pada sway-launcher-desktop dari paragraf sebelumnya. Ketika semua masalah diselesaikan, tambahkan baris ke konfigurasi goyangan
exec dex -ae Sway
Atau Anda dapat melakukan yang sebaliknya: menyalin file-file desktop yang diinginkan ke beberapa direktori non-standar dan mengatur dex di atasnya dengan perintah
exec dex -as /path/to/your/dir
Tangkapan layar
Dua peti mati akan membantu kami dengan ini. slurp memungkinkan Anda untuk memilih area persegi panjang sewenang-wenang di layar, dan suram membuat screenshot dari itu. Dalam konfigurasi saya ini terlihat seperti ini:
bindsym Print exec grim ~/Pictures/screen-"$(date +%s)".png bindsym $mod+Print exec grim -g "$(slurp)" ~/Pictures/screen-"$(date +%s)".png
$mod+PrintScreen
- tangkapan layar area sembarang, PrintScreen
- tangkapan layar seluruh layar.
Screencasts
Jika Anda perlu menulis screencast ke file atau streaming ke aliran RTMP (misalnya, pada Twitch), wf-recorder akan membantu dengan ini (juga mendukung slurp).
Jika Anda ingin menggunakan OBS Studio, maka ada plugin wlrobs untuk ini.
Namun, solusi paling universal yang didukung di satu sisi dalam KDE dan Gnome, dan di sisi lain, khususnya di browser Chrome dan Firefox, adalah dengan menggunakan Pipewire dan spesifikasi XDG Desktop Portal. Untuk goyangan, ada lapisan yang diperlukan xdg-desktop-portal-wlr , meskipun saya tidak memeriksa kinerjanya.
Mode malam
Mode malam terdiri dari mengganti warna monitor dengan warna yang lebih hangat dalam gelap. Para ilmuwan meragukan seberapa berguna ini sebenarnya, dan pengembang Wayland memutuskan bahwa standardisasi protokol koreksi gamma tidak berguna karena alasan teknis.
Namun demikian, saya suka fitur ini, dan dalam goyangan itu juga ada. Untuk mode malam, kita memerlukan garpu pergeseran merah ini dengan dukungan untuk protokol khusus-goyangan.
Kami menginstalnya dengan cara apa pun, dalam ~/.config/redshift/redshift.conf
, pilih protokol yang diinginkan dan tentukan garis bujur dan garis lintang.
[redshift] location-provider=manual adjustment-method=wayland [manual] lat=xx.xx lon=yy.yy
Kunci dan layar mati
Dua dari peti mati datang untuk menyelamatkan di sini. swayidle
menjalankan perintah yang diberikan dalam batas waktu jika tidak ada aktivitas (atau sebaliknya, penampilannya), dan swaylock
mengunci layar dan memerlukan kata sandi. Anda dapat mematikan layar (atau semua layar, jika ada beberapa)
swaymsg "output * dpms off"
Inilah yang akan terlihat seperti daemon, memblokir layar setelah 300 detik tidak aktif dan mematikannya setelah 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'
Jalankan dengan cara apa pun.
i3block
Blok siap pakai dengan kalender, jaringan, status disk, dll. dll. dapat dipinjam dari repositori i3blocks-contrib . Di i3blocks mereka ditambahkan di config di ~/.config/i3blocks/config
. Misalnya, sebuah blok dengan pembaruan setiap 5 detik pada hari dalam seminggu, tanggal dan waktu:
[time] command=date +"%a %d/%m %H:%M" interval=5
Tapi ini contoh yang terlalu sederhana. Bahkan, penggemar goyang i3 dan bergoyang memiliki grail suci: menampilkan bilah judul dari jendela saat ini di bilah atas. Mari kita cari tahu bagaimana mencapai ini.
Pertama-tama, kami mulai membaca man sway-ipc
dan menemukan bahwa Anda dapat berlangganan acara di sana. Yang diperlukan memiliki kode 0x80000003. WINDOW
0x80000003. WINDOW
dan mengembalikan objek json dari struktur ini:
{ "change" : "focus | title | ...", "container": { focused: true | false, name: "...", ... } }
Memang, jendela itu sendiri dapat mengubah judulnya ( change == title
), atau kita dapat memindahkan fokus ke jendela lain ( change == focus
). Namun, jendela dapat mengubah judul dan tidak fokus. Untuk menyaring peristiwa semacam itu, kita harus memeriksa properti container.focused
.
Anda dapat menjelaskan semua logika ini dengan Python atau Go, tetapi ada cara yang lebih baik. swaymsg
membuatnya mudah untuk berlangganan acara yang diinginkan dan menampilkannya ke stdout:
$ swaymsg -m -t SUBSCRIBE "['window']"
dan kami akan memproses json yang dihasilkan di jq
. Tanpa membahas seluk-beluk sintaks kueri utilitas yang luar biasa ini, inilah hasilnya:
$ query='select(.change == "focus" or (.change == "title" and .container.focused)) | .container.name' $ swaymsg -m -t SUBSCRIBE "['window']" | jq --unbuffered -r "$query"
Script dua baris di bash, dan tidak ada kode lagi! Bendera --unbuffered
diperlukan, jika tidak, i3blocks tidak akan langsung menerima baris baru, tetapi hanya ketika buffer dihapus.
Terakhir, tambahkan blok berikut ke konfigurasi i3blocks:
[active_window] command=/path/to/our/script.sh interval=persist
Pekerjaan rumah: ajarkan suram untuk mengambil tangkapan layar dari jendela saat ini. Mereka mengatakan bahwa hal-hal seperti itu tidak mungkin di Wayland, tetapi orang-orang meragukannya.
Pekerjaan rumah 2: Ajarkan i3block untuk menampilkan tata letak keyboard saat ini sebagai bendera. Ada beberapa blok di i3blocks-contrib, tetapi mereka menampilkan teks alih-alih sebuah bendera dan tidak berfungsi di Wayland.
Program lainnya
wl-clipboard memungkinkan Anda untuk bekerja dengan clipboard dari terminal, yaitu, menggantikan xclip dan xsel. Ini sangat berguna untuk pengguna vim, di mana salin / tempel mulai menggunakan "+y
/ "+p
(cukup instal paket ini, tidak diperlukan konfigurasi tambahan).
ydotool - penggantian xdotool.
waypipe - proksi untuk transparansi jaringan. Sejujurnya, saya tidak ingat kapan terakhir kali seseorang mengajukan pertanyaan terkait fitur ini di forum khusus. Mungkin mereka tidak menggunakannya sama sekali? Saya - jelas tidak.
KDE Connect Tambahkan file org.kde.kdeconnect.nonplasma.desktop
ke org.kde.kdeconnect.nonplasma.desktop
(lihat bagian sebelumnya), instal KDE Connect pada smartphone Anda dan konfigurasikan koneksi mereka - dan Anda dapat mengontrol pemutaran musik dan video dari smartphone Anda di browser dengan plugin integrasi plasma , di vlc , dalam cantata, dalam mpv dengan plugin mpv-mpris , dan juga menerima notifikasi dalam mako. Penghargaan saya untuk proyek KDE untuk mengembangkan program yang tidak terpaku pada ekosistem mereka.
Kesimpulan
Anda dapat menulis tentang mengatur semua ini (terutama panel i3blocks) tanpa akhir, tetapi lebih baik berhenti di sini. Inilah yang saya dapatkan:

Juga pergi ke subreddit / r / unixporn dan kagumi apa yang dilakukan orang. (Namun, 95% dari semua yang ditata di sana terlihat indah, tetapi pasti tidak cocok untuk pekerjaan sehari-hari :)).