Wayland๋ฅผ ์ด์šฉํ•œ Sway 1.7 ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์ถœ์‹œ

๋ณตํ•ฉ ๊ด€๋ฆฌ์ž Sway 1.7์˜ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์œผ๋ฉฐ Wayland ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ i3 ๋ชจ์ž์ดํฌ ์ฐฝ ๊ด€๋ฆฌ์ž ๋ฐ i3bar ํŒจ๋„๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” C๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” Linux ๋ฐ FreeBSD์—์„œ์˜ ์‚ฌ์šฉ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

i3 ํ˜ธํ™˜์„ฑ์€ ๋ช…๋ น, ๊ตฌ์„ฑ ํŒŒ์ผ ๋ฐ IPC ์ˆ˜์ค€์—์„œ ์ œ๊ณต๋˜๋ฏ€๋กœ Sway๋ฅผ X3 ๋Œ€์‹  Wayland๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํˆฌ๋ช…ํ•œ i11 ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Sway๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฐ„์ ์œผ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ™”๋ฉด์— ์ฐฝ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐฝ์€ ํ™”๋ฉด ๊ณต๊ฐ„์„ ์ตœ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ณ  ํ‚ค๋ณด๋“œ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ฐฝ์„ ๋น ๋ฅด๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฒฉ์ž ๋ชจ์–‘์œผ๋กœ ๋ฐฐ์—ด๋ฉ๋‹ˆ๋‹ค.

์™„์ „ํ•œ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด swayidle(KDE ์œ ํœด ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค), swaylock(ํ™”๋ฉด ๋ณดํ˜ธ๊ธฐ), mako(์•Œ๋ฆผ ๊ด€๋ฆฌ์ž), grim(์Šคํฌ๋ฆฐ์ƒท ๋งŒ๋“ค๊ธฐ), slurp(์˜์—ญ ์„ ํƒ)๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. wf-recorder(๋น„๋””์˜ค ์บก์ฒ˜), waybar(์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ‘œ์‹œ์ค„), virtboard(ํ™”๋ฉด ํ‚ค๋ณด๋“œ), wl-clipboard(ํด๋ฆฝ๋ณด๋“œ ์ž‘์—…), wallutils(๋ฐ์Šคํฌํ†ฑ ๋ฐฐ๊ฒฝ ํ™”๋ฉด ๊ด€๋ฆฌ).

Sway๋Š” ๋ณตํ•ฉ ๊ด€๋ฆฌ์ž ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ธฐ๋ณธ ๊ธฐ๋ณธ ์š”์†Œ๊ฐ€ ํฌํ•จ๋œ wlroots ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๋ชจ๋“ˆ์‹ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Wlroots์—๋Š” ํ™”๋ฉด, ์ž…๋ ฅ ์žฅ์น˜, OpenGL์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ  ๋ Œ๋”๋ง, KMS/DRM, libinput, Wayland ๋ฐ X11๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ(Xwayland ๊ธฐ๋ฐ˜ X11 ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ์ด์–ด๊ฐ€ ์ œ๊ณต๋จ)์— ๋Œ€ํ•œ ์ถ”์ƒ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Sway ์™ธ์—๋„ wlroots ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Librem5 ๋ฐ Cage๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. C/C++ ์™ธ์—๋„ Scheme, Common Lisp, Go, Haskell, OCaml, Python ๋ฐ Rust์šฉ ๋ฐ”์ธ๋”ฉ์ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • ๋งˆ์šฐ์Šค๋กœ ํƒญ์„ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ ํ˜„์‹ค ํ—ค๋“œ์…‹์— ๋Œ€ํ•œ ์ถœ๋ ฅ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋†’์€ ๋น„ํŠธ ๊นŠ์ด ํ•ฉ์„ฑ ๋ชจ๋“œ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด "output render_bit_length" ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ „์ฒด ํ™”๋ฉด ์ฐฝ ์ถœ๋ ฅ์˜ ์•ˆ์ •์„ฑ ๋ฐ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (dmabuf๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ถ”๊ฐ€ ๋ฒ„ํผ๋ง ์—†์ด ์ง์ ‘ ์ถœ๋ ฅ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.)
  • xdg-activation-v1 ํ”„๋กœํ† ์ฝœ์ด ์‚ฌ์šฉ๋˜์–ด ์„œ๋กœ ๋‹ค๋ฅธ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€ ํ‘œ๋ฉด ๊ฐ„์— ํฌ์ปค์Šค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด xdg-activation์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํฌ์ปค์Šค๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).
  • ํ™œ์„ฑ ํƒญ์˜ ์ƒ‰์ƒ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด client.focused_tab_title ์˜ต์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ž์‹ ๋งŒ์˜ DRM(Direct Rendering Manager) ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด "output modeline" ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ™”๋ฉด์„ ๋” ์‰ฝ๊ฒŒ ๋น„์šธ ์ˆ˜ ์žˆ๋„๋ก "์ถœ๋ ฅ dpms ํ† ๊ธ€" ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. "๊ฐ„๊ฒฉ" ๋ช…๋ น๋„ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋…€์žฅ ", "smart_gaps inverse_outer" ๋ฐ "๋ถ„ํ•  ์—†์Œ".
  • "--my-next-gpu-wont-be-nvidia" ์˜ต์…˜์ด ์ œ๊ฑฐ๋˜์–ด "--unsupported-gpu" ๋ชจ๋“œ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋…์  NVIDIA ๋“œ๋ผ์ด๋ฒ„๋Š” ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์„ค์ •์— ์ •์˜๋œ ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ๋ฐœ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์ค‘์— swaybar ๋ฐ swaynag ๋Œ€ํ™” ์ƒ์ž๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ œ๋ชฉ ํ…์ŠคํŠธ์˜ ๋ฌธ์ž์— ๋”ฐ๋ผ ์ฐฝ ์ œ๋ชฉ์˜ ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ธˆ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ œ๋ชฉ์€ ํ•ญ์ƒ ๊ณ ์ •๋œ ๋†’์ด๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

Wayland๋ฅผ ์ด์šฉํ•œ Sway 1.7 ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์ถœ์‹œ


์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€