Kể từ tháng 11 năm 2014 , các phiên bản mới nhất được startxwinsử dụng xinitđể khởi động máy chủ Cygwin / X, được gọi là thực sự XWin.exe. Quá trình diễn ra như thế này:
- Bạn gọi
startxwin
startxwintạo một .Xauthoritytệp mới và một tệp được gọi .serverauth.1234(nơi 1234thay đổi mỗi khi bạn khởi động X)
startxwin thiết lập một số tham số máy khách và máy chủ
startxwincác cuộc gọi xinitvới các tham số máy khách và máy chủ, bao gồm một số tập lệnh shell tùy chọn và tham chiếu đến tệp auth.
xinit khởi động máy chủ X, chạy một số tập lệnh RC
xinitkhởi động máy khách (thường xterm) hoặc tập lệnh RC của máy khách. Chúng tôi muốn tránh điều này
- Khi bạn đóng máy khách hoặc tập lệnh RC của máy khách kết thúc,
xinittắt máy chủ X. Nếu chúng ta tránh bước 6, chúng ta cũng cần tránh điều này
Có thể chạy XWin.exetrực tiếp từ bên trong vỏ đăng nhập Bash, mà không cần thực hiện các tác vụ xung quanh startxwinvà xinitthực hiện. Ưu điểm chính của điều này là nó hoạt động như chúng ta muốn: máy chủ X khởi động và vẫn chạy. Thật không may, vì không có .Xauthoritytệp nào được chuyển trong quá trình khởi động, máy chủ X của bạn sẽ cho phép mọi quá trình cục bộ kết nối với nó, điều này không an toàn.
May mắn thay, đó là xinithầu hết những thứ chúng ta không muốn. Có một bản hack nhanh chóng bỏ qua xinitnhưng vẫn giữ các yếu tố còn lại startxwinliên quan đến chính máy chủ.
TL; DR: Trong startxwin, có một dòng gần phía dưới có dòng chữ:
eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs
Thay đổi dòng đó thành:
eval \"$server\" $display $serverargs
Từ bây giờ, startxwinkịch bản sẽ gọi XWin.exetrực tiếp, thay vì gọi xinit. Rõ ràng điều này sẽ vô hiệu hóa bất kỳ tập lệnh RC máy khách nào, nhưng chúng tôi không muốn những tập lệnh này ngay từ đầu. Điều đó cũng có nghĩa là X sẽ tiếp tục chạy mà không cần quá trình máy khách để giữ cho nó tồn tại (tức là không xinitgiết nó).
exec sleep infinitynhư được hiển thị ở đây: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit