- 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
- AeroSpace là trình quản lý cửa sổ tiling giống i3 cho macOS
- Demo và tài liệu được cung cấp riêng
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 windows và Dynamic 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
Ý 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 leftNế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 leftsẽ 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à terminalHoặ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
SIPrấ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
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
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
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
alt+h/alt+jCommand+Tablà 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 workspaceTô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 sizecó 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ầnNhư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 độngNgoà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-servicevào phím tắt; chạy là lúc nào cũng hoạt động lại ngayVì 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+2bị 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ằngalt+mvàalt+shift+mMộ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