2 điểm bởi GN⁺ 2024-06-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • AeroSpace là trình quản lý cửa sổ tiling đang ở giai đoạn beta cho macOS, mang lại cách sử dụng tương tự i3, hướng tới bố cục dựa trên cây và workflow lấy bàn phím làm trung tâm
  • Không phụ thuộc vào Spaces mặc định của macOS mà dùng cơ chế mô phỏng workspace ảo riêng, nhấn mạnh khả năng chuyển workspace nhanh không animation và hoạt động mà không cần tắt SIP
  • Cấu hình dựa trên TOML dạng văn bản thuần, thiết kế ưu tiên CLI, bao gồm manpage và tự động hoàn thành shell; hỗ trợ nhiều màn hình theo mô hình tương tự i3
  • Hiện đang là Public Beta, có thể dùng hằng ngày nhưng dự kiến sẽ có breaking change trước bản 1.0; trước 1.0 vẫn còn các việc như refactor lớn, combinator kiểu shell, nghiên cứu API phím tắt toàn cục
  • Giá trị của dự án tập trung vào người dùng nâng cao và developer, sử dụng bàn phím, tính năng thực dụng, bảo trì dựa trên API accessibility công khai; cấu hình GUI, hòa hợp với macOS Spaces và ricing có mức ưu tiên thấp

Môi trường tiling trên macOS mà AeroSpace cung cấp

Tính năng cốt lõi và thiết kế

  • Bố cục cửa sổ được xây dựng như một trình quản lý cửa sổ tiling dựa trên mô hình cây
  • Trải nghiệm sử dụng lấy cảm hứng từ i3
  • Chuyển workspace diễn ra nhanh, không có animation và không cần tắt SIP
  • Do Spaces mặc định của macOS có nhiều hạn chế đáng kể nên AeroSpace không dùng nó, mà tự mô phỏng workspace ảo riêng
  • Cấu hình là văn bản thuần phù hợp với dotfiles; ví dụ cấu hình mặc định có thể xem tại default-config.toml
  • Thiết kế ưu tiên CLI và bao gồm manpage cùng tự động hoàn thành shell
  • Hỗ trợ nhiều màn hình theo mô hình tương tự i3

Cài đặt và điều kiện liên quan đến bảo mật

  • Cách cài đặt được khuyến nghị là Homebrew cask, có thể nhận cập nhật tự động
brew install --cask nikitabobko/tap/aerospace
  • Trong môi trường nhiều màn hình, cần kiểm tra xem các màn hình đã được bố trí đúng chưa
  • Các cách cài đặt khác có trong hướng dẫn cài đặt
  • AeroSpace hiện không ở trạng thái notarized
    • Script cài đặt Homebrew được cấu hình để tự động xóa thuộc tính com.apple.quarantine
    • Nhờ cấu hình này, ứng dụng sẽ hoạt động ngay mà không có cảnh báo “Apple cannot check AeroSpace for malicious software”

Trạng thái dự án và các việc trước 1.0

  • Trạng thái hiện tại là Public Beta
  • Có thể dùng hằng ngày, nhưng nên dự kiến sẽ có breaking change cho đến khi đạt 1.0
  • Các hạng mục còn lại đang chặn bản phát hành 1.0 gồm:
    • Vấn đề hiệu năng: việc triển khai một thread cho mỗi application để né blocking AX API của macOS đã hoàn tất
    • Refactor lớn: viết lại cấu trúc dữ liệu mutable double-linked core tree thành immutable single-linked persistent tree
      • Quan trọng cho độ ổn định và hiệu năng tiềm năng
      • Giúp sửa vấn đề ổn định khiến cửa sổ có thể di chuyển ngẫu nhiên sang workspace đang được focus
      • Giúp hỗ trợ macOS native tabs
    • Triển khai combinator kiểu shell
      • Cách tiếp cận tối thiểu có khả năng cao là đưa vào ||, &&, ; và lệnh eval để gửi nhiều lệnh cùng lúc
    • Nghiên cứu khả năng dùng API CGEvent.tapCreate cho phím tắt toàn cục
      • Có thể hoặc không thể phân biệt modifier trái/phải
  • Các vấn đề lớn dự kiến sau 1.0 gồm sticky windowsDynamic TWM

Giá trị và những mục tiêu không theo đuổi của dự án

  • AeroSpace nhắm tới người dùng nâng cao và developer
  • Hướng tới cách sử dụng lấy bàn phím làm trung tâm
  • Cố gắng tránh breaking change đối với file cấu hình, CLI và hành vi, nhưng các breaking change thận trọng vẫn có thể xảy ra để tránh phần mềm bị đình trệ
    • Sau 1.0, khi có breaking change, dự án bảo đảm sẽ tăng Semver major version
    • Trước 1.0, breaking change có thể xảy ra bình thường
  • Không dùng GUI trừ khi thật sự cần thiết
    • Không có kế hoạch cung cấp GUI cho cấu hình
    • Cho phép biểu tượng status menu để phản hồi trực quan
  • Tính năng được đánh giá theo tính thực dụng; các tính năng ngoại hình như viền cửa sổ, độ trong suốt, animation không được xem là tính năng thực dụng
  • Cố gắng tránh “dark magic” như private API hay code injection
    • Hiện chỉ dùng một private API _AXUIElementGetWindow để lấy window ID của accessibility object
    • Ngoài ra dùng API accessibility công khai của macOS
    • Không yêu cầu tắt SIP
    • Mục tiêu là cấu hình bền vững trước các bản cập nhật macOS và dễ bảo trì
  • Hòa hợp tốt với các tính năng macOS hiện có không phải là mục tiêu
    • Không thừa nhận sự tồn tại của macOS Spaces và dùng cơ chế mô phỏng workspace riêng
  • ricing có mức ưu tiên thấp
    • Chỉ hỗ trợ tối thiểu vài callback cho gaps và tích hợp bar
    • Maintainer hiện tại không quan tâm đến ricing; các issue liên quan phần lớn có mức ưu tiên thấp hoặc bị bỏ qua
    • Nếu có thêm maintainer, lập trường về ricing có thể thay đổi

Tương thích, cộng đồng và dự án liên quan

  • Khả năng tương thích macOS phụ thuộc vào cách build
    • Chạy binary AeroSpace: macOS 13+
    • Debug build từ source: macOS 14+
    • Release build từ source: macOS 15+, cần Xcode 26+
  • Dự án yêu cầu tạo Discussion trước, thay vì nhận issue ngay
  • GitHub Discussions có các kênh: tất cả, thông báo, thông báo phát hành, ý tưởng tính năng, chung, bug tiềm ẩn, hỏi đáp
  • Các dự án liên quan được nêu gồm:
    • Amethyst: trình quản lý cửa sổ tiling kiểu xmonad
    • InstantSpaceSwitcher: chuyển space tức thì bằng cách tổng hợp các cử chỉ trackpad tốc độ cao nhân tạo
    • yabai: trình quản lý cửa sổ tiling cho macOS dựa trên binary space partitioning

1 bình luận

 
GN⁺ 2024-06-07
Ý kiến trên Hacker News
  • Tôi dùng cái này hằng ngày, và kết luận là đây là cách tốt nhất để quản lý cửa sổ trên Mac, nhưng vẫn chưa bằng i3/sway
    Đặc biệt, hỗ trợ kéo cửa sổ để sắp xếp lại theo vị trí tương đối với nhau rất hạn chế, nên không thể tạo phân tách dọc/ngang mới như sway. Vì vậy để tạo bố cục cửa sổ mong muốn, phần lớn phải vòng qua các lệnh bàn phím khá gượng gạo
    Ví dụ khi có hai cửa sổ trái/phải và muốn chia dọc một bên, trong sway chỉ cần mở cửa sổ mới rồi kéo thả vào nửa trên/dưới của cửa sổ hiện có là xong. Với AeroSpace, cách tốt nhất tôi tìm được là mở cửa sổ mới, đổi cả ba cửa sổ thành một stack dọc, rồi đặt focus vào cửa sổ ban đầu ở bên trái và chạy move left

    • Nếu bật normalization (chuẩn hóa) thì không cần “chuyển sang stack dọc”
      Trong bố cục này:

      h_tiles
      ├── window1 (focused)
      ├── window2
      └── window3

      chạy move left sẽ thành như sau:

      h_tiles
      ├── window1 (focused)
      └── v_tiles
      ├── window2
      └── window3

    • Tôi còn không biết là trong sway có thể kéo thả cửa sổ. Tôi thường chọn cửa sổ muốn chia, rồi dùng Command + v để đặt phân tách dọc và tạo cửa sổ mới, thường là terminal
      Hoặc dùng Command + Shift + [hjkl] để di chuyển cửa sổ

    • Tôi định dùng thử để xem vấn đề chính của mình có được giải quyết trước không. Tôi đang tìm cách để Mac ghi nhớ bố cục màn hình cho ra hồn
      Mỗi lần khởi động rồi đánh thức máy, desktop dùng 3 màn hình của tôi lại rơi vào trạng thái mất trí nhớ hoàn toàn
      Lý tưởng nhất là tôi có thể tự vận hành các workspace, và dùng được khi chỉ có màn hình laptop hoặc khi dùng 2–3 màn hình ngoài ở các bàn làm việc khác nhau tại công ty/nhà

    • Tôi đang dùng Spectacle, nhưng nó không còn được hỗ trợ nữa

    • Tôi chưa dùng cái này, nhưng đang dùng yabai, và nó hoạt động đúng theo cách đã mô tả

  • Điểm không cần tắt SIP rất thú vị. Hầu như tất cả các trình quản lý cửa sổ tương tự đều yêu cầu vô hiệu hóa SIP, nên tôi đã chần chừ
    Tôi tò mò AeroSpace làm khác gì để có thể hoạt động cùng SIP

    Nội dung tôi tìm thấy trong README:

    AeroSpace không yêu cầu tắt SIP (System Integrity Protection). Ví dụ yabai cần tắt SIP để dùng một số tính năng. AeroSpace hoặc tìm cách khác, chẳng hạn mô phỏng workspace, hoặc đơn giản là không triển khai tính năng đó. Độ trong suốt cửa sổ và bóng cửa sổ không phải là các tính năng thực dụng

    • Tôi từng dùng yabai nhưng chuyển qua lại giữa các macOS Spaces quá chậm. Tôi đã chuyển sang AeroSpace và thật sự thích cách triển khai workspace của nó
      Tuy nhiên, tính năng focus đi theo chuột của yabai thực sự rất hay, nên tôi tò mò liệu có thể để AeroSpace đảm nhiệm các tính năng kiểu i3, còn yabai chỉ dùng riêng cho tính năng đó không
    • Tôi tò mò liệu tính năng chuyển focus theo chuột có thể làm được mà không vô hiệu hóa SIP không. Đây là một trong những tính năng tôi chưa thấy ở các trình quản lý cửa sổ macOS khác
  • Tuyệt vời. Trước giờ tôi dùng Amethyst, nhưng AeroSpace lập tức khiến tôi thích hơn
    Điều tôi khó chịu nhất ở Amethyst là nó ném cửa sổ đi rất ì ạch và thiếu ổn định. Trong AeroSpace, cửa sổ di chuyển sang workspace/màn hình khác gần như tức thì và không bị lỗi
    Tôi cũng thích việc nó bỏ hẳn workspace tích hợp của macOS và dùng workspace ảo riêng. Như tác giả nói, cách tích hợp sẵn khá gây thất vọng, và nhờ cách này mà thiết lập nhiều màn hình trở nên chịu đựng được, thậm chí hơi thú vị

    Trên máy làm việc, tôi không thể dùng yabai vì cần vô hiệu hóa SIP, còn tác giả AeroSpace phản đối rõ ràng việc này và quyết định đó có vẻ hợp lý

    Hồi còn dùng Linux, tôi đã chuyển từ i3 sang xmonad, nhưng trên macOS thì AeroSpace rõ ràng cho cảm giác tốt hơn. Cả ba trình quản lý cửa sổ trên macOS đều không bằng các trình quản lý cửa sổ thực thụ trên Linux, nhưng trong giới hạn có thể, AeroSpace có vẻ gần với lựa chọn tốt nhất

    • yabai hoạt động tốt mà không cần tắt SIP. Tôi chưa dùng AeroSpace nên chưa thể so sánh tính năng
  • Tôi thích cách tiếp cận Spaces giả
    Tôi từng nghĩ đến việc thu nhỏ cửa sổ để làm điều tương tự, nhưng chưa thực sự làm
    Trên macOS, vì thiếu API nên tiling buộc phải khá u ám. Dù vậy, cách này có lẽ là hướng có hiệu năng tốt nhất
    Tôi từng dùng yabai, nhưng chỉ dùng cho di chuyển cửa sổ và focus đi theo chuột, không dùng cho tiling. Lý do là nó không ổn định, và đó không phải lỗi của yabai
    Cảm ơn nikitabobko

    Giờ chỉ cần tìm cách sửa để alt-tab bỏ qua các cửa sổ của mọi workspace giả đang bị gom vào góc là tôi sẽ dùng ngay
    JankyBorders được liên kết trong tài liệu cũng hay

    https://github.com/koekeishiya/yabai
    https://github.com/lwouis/alt-tab-macos
    https://github.com/FelixKratz/JankyBorders

    • Tôi giải quyết bằng cách dùng Stack và chuyển qua lại giữa các cửa sổ bằng alt+h/alt+j
      Command+Tab là chuyển đổi cửa sổ toàn cục, còn các phím tắt trên dùng để chuyển đổi cục bộ trong ngữ cảnh workspace
  • Tôi đã khá quen với công cụ quản lý cửa sổ của Raycast, nhưng thực tế rất khó dùng chung với AeroSpace
    Ví dụ trong Raycast, tùy chọn reasonable size có thể mở cửa sổ ở kích thước vừa phải và đặt ở giữa. Cũng có thể tạo phân tách nửa trái/nửa phải, phóng to tối đa, hoặc chia theo 4 góc/3 phần
    Nhưng trong AeroSpace, việc đưa cửa sổ trong một tile sang nửa trái, nửa phải, 2/3 bên trái, hoặc làm nó floating bằng reasonable size đều không hoạt động

Ngoài ra, có một lỗi khi di chuyển ứng dụng bằng “next desktop” và “previous desktop”. Có vẻ AeroSpace triển khai nhiều desktop của Mac thành workspace riêng của nó, nên video hướng dẫn thực ra không cho thấy việc chuyển giữa các desktop khác nhau, mà là chuyển giữa các workspace khác nhau
Kết quả là nếu dùng “next desktop” và “previous desktop” thì tiling bị hỏng hoàn toàn. Nếu workspace được liên kết trực tiếp với từng desktop của Mac, để việc chuyển workspace cũng chính là chuyển desktop, thì có lẽ nó đã tương thích phần nào với Raycast và các chức năng macOS mặc định, nên thấy hơi tiếc

  • Raycast thật sự rất tốt
    Tôi nghĩ sau này nó sẽ trở thành như ứng dụng tiêu chuẩn đối với các power user Mac
    Nó có quá nhiều tính năng hữu ích nên chắc phải đào sâu tìm hiểu. Tôi dùng tích hợp Linear.app nhiều nhất

  • Trong 5 phiên bản macOS vừa qua, tôi đã dùng yabai khá nhiều trên máy làm việc mà không tắt SIP
    Tôi thật sự thích nó, và tiling chỉ bất ổn khoảng vài ngày một lần. Dù tôi chạy lệnh yabai ít nhất mỗi phút một lần, nó vẫn như vậy, nên tôi đã gán yabai --restart-service vào phím tắt; chạy là lúc nào cũng hoạt động lại ngay

    Vì vậy tôi thấy nó khá ổn định và tuyệt vời. Nhiều màn hình thì khó và tôi không dùng nhiều, nhưng stack và kiểu minimize “toàn màn hình” nhanh thì thật sự rất hay

    Trong một vài lần nâng cấp phiên bản, antivirus của công ty nhận nhầm nó là virus và vô hiệu hóa trong 24 giờ; vào những ngày đó, máy tính trở nên chậm chạp và u ám đến mức tôi không muốn dùng

  • Tôi đã dùng thử vài tháng nay. i3 gần như hoàn hảo, còn AeroSpace là một nỗ lực tốt, nhưng còn khá xa i3 và khá bất ổn
    Có lẽ là vì Mac OS X không cho phép kiểm soát toàn diện như các trình quản lý cửa sổ Unix

    Dù vậy tôi vẫn chưa tìm được thứ nào tốt hơn. Khi Linux chạy tốt trên Apple Silicon, tôi định sẽ cài. Ít nhất với tôi, chỉ riêng i3 đã là lý do đủ để dùng Linux, còn Mac OS X thì thật sự rất tệ về mặt trình quản lý cửa sổ

    • Tôi từng đụng nhẹ vào mảng gần giống thế này như một dự án sở thích, và nguyên nhân là do API chính thức bị hạn chế
      Cuối cùng phải phụ thuộc nhiều vào API riêng tư không được tài liệu hóa và các cách hack. Những thứ này dành cho nội bộ nên không ổn định, và bản thân hệ điều hành cũng không được thiết kế để hợp tác tốt trong những tình huống có can thiệp mạnh vào quản lý cửa sổ/tiến trình. Vì vậy hệ điều hành và ứng dụng bên thứ ba thường xuyên giẫm chân nhau

    • Tôi cũng gặp vấn đề tương tự. Đến giờ vẫn chưa tìm được trình quản lý cửa sổ nào xử lý tốt chế độ toàn màn hình mặc định của OSX
      AeroSpace bị rối khi dùng toàn màn hình mặc định. Nó không biết nên đặt focus ở đâu

      Trường hợp của tôi:

      Workspace 1: terminal
      Workspace 2: slack app
      Open chrome in native full screen

      Giờ thử chuyển sang workspace 1 thì sẽ gặp vấn đề

      Trước mắt tôi định dùng tiếp mà không có ứng dụng toàn màn hình mặc định. Hy vọng khi đó nó hoạt động tốt hơn

  • Tôi tò mò trải nghiệm người dùng của sản phẩm này khác gì so với Yabai. Tôi không nghĩ vấn đề SIP của Yabai là chuyện lớn. Trong số người dùng Yabai mà tôi biết, không ai tắt SIP, và có vẻ mọi người đều dùng ổn
    Tôi muốn biết khác biệt có phải là phong cách i3 không

    Cá nhân tôi dùng một tiện ích kiểu Fluxbox, cho phép giữ tổ hợp phím bổ trợ rồi dùng chuột để đổi kích thước và di chuyển cửa sổ từ bất kỳ vị trí nào trên cửa sổ. Nó không tự động hóa, nhưng cũng không bất ổn. Thay vì đi theo hướng được quản lý hoàn toàn, nó gần với việc giảm di chuyển chuột để floating dễ hơn nhiều

    • Tôi đã dùng nhiều cả hai và tôi thích AeroSpace hơn
      Điều quyết định với tôi là hỗ trợ nhiều màn hình, ngoài ra còn có vài ưu điểm nhỏ khác

      Trong Yabai, nếu chuyển workspace sang màn hình mới thì ID đổi, nên không thể tiếp tục truy cập bằng phím tắt bàn phím. Lý do alt+2 bị hỏng là vì nó không còn là workspace 2 nữa, mà đã thành 11 hoặc một số khác. Trong AeroSpace, có thể dễ dàng chuyển workspace giữa các màn hình bằng alt+malt+shift+m

      Một tính năng khác là cửa sổ được gắn vào ngay lập tức, không có animation Mission Control. Đây là điểm khiến tôi thật sự rất khó chịu

      Hai tính năng này là những thứ tôi cần gần như mỗi ngày, và vì hỗ trợ workspace thiếu sót nên với tôi Yabai gần như hoàn toàn không dùng được

    • Trong Yabai, nếu muốn xử lý Spaces theo bất kỳ cách nào, thay đổi thứ tự xếp chồng của cửa sổ, hoặc dùng nhiều tính năng khác, thì phải tắt SIP [0]
      Nếu không dùng các tính năng đó thì tùy mỗi người chọn, nhưng với nhiều người dùng đó là chức năng cốt lõi

      [0] https://github.com/koekeishiya/yabai/wiki/Disabling-System-I...

  • Tôi tò mò nó khác gì với Amethyst. Gần đây Amethyst đã ổn định hơn nhiều và tôi đang dùng rất vui vẻ
    Cấu hình dựa trên văn bản nhìn qua thì khá ổn, nhưng tôi không chắc có đáng chuyển sang không

    • Trước giờ tôi dùng Amethyst, nhưng ngay lập tức tôi đã thích AeroSpace hơn
      Điều tôi bất mãn nhất ở Amethyst là nó ném cửa sổ rất ì ạch và không ổn định. Trong AeroSpace, cửa sổ di chuyển sang workspace/màn hình khác gần như tức thì và không thất bại
      Tôi cũng thích việc nó bỏ hẳn workspace tích hợp sẵn của macOS và dùng workspace ảo riêng. Nhờ vậy việc xử lý thiết lập nhiều màn hình trở nên có thể chịu được và còn hơi thú vị

      Thời còn dùng Linux, tôi đã chuyển từ i3 sang xmonad, nhưng trên macOS thì AeroSpace rõ ràng cho cảm giác tốt hơn. Cả ba trình quản lý cửa sổ trên macOS đều không bằng trình quản lý cửa sổ thực sự trên Linux, nhưng AeroSpace có vẻ gần với lựa chọn tốt nhất trong giới hạn có thể

    • Theo trải nghiệm của tôi, AeroSpace tốt hơn nhiều ở hầu hết các mặt
      Có vài điểm kỳ lạ và tôi cần gửi vài bug report, nhưng nó đã khiến macOS dễ chịu hơn Amethyst rất nhiều

    • Amethyst cũng có thể dùng cấu hình dựa trên văn bản
      https://github.com/ianyh/Amethyst/blob/development/docs/conf...

  • Tôi đã dùng cái này trong vài tháng qua và nhìn chung khá hài lòng. Tôi thích việc mọi thứ được cấu hình bằng một file duy nhất, tức là không có GUI
    Một vấn đề là nếu ứng dụng dùng tab mặc định của Mac, AeroSpace sẽ coi mỗi tab là một cửa sổ, khiến tính năng toàn màn hình bị hỏng hoàn toàn. Alacritty là một ví dụ, khá kỳ lạ

    Issue liên quan đang được mở:
    https://github.com/nikitabobko/AeroSpace/issues/68

    • Yabai cũng gặp vấn đề tương tự, và tác giả vẫn chưa sửa được