Kể từ tháng 11 năm 2014 , các phiên bản mới nhất được startxwin
sử 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
startxwin
tạo một .Xauthority
tệp mới và một tệp được gọi .serverauth.1234
(nơi 1234
thay đổ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ủ
startxwin
các cuộc gọi xinit
vớ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
xinit
khở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,
xinit
tắ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.exe
trự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 startxwin
và xinit
thự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ó .Xauthority
tệ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à xinit
hầu hết những thứ chúng ta không muốn. Có một bản hack nhanh chóng bỏ qua xinit
nhưng vẫn giữ các yếu tố còn lại startxwin
liê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ờ, startxwin
kịch bản sẽ gọi XWin.exe
trự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 xinit
giết nó).
exec sleep infinity
như được hiển thị ở đây: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit