Làm cách nào để ngăn XWin Server của Cygwin tự động khởi động xterm?


12

Bất cứ khi nào tôi khởi động máy chủ X của Cygwin bằng liên kết "Máy chủ XWin" trong menu Bắt đầu hoặc bằng cách chạy startxwintừ trình bao Cygwin, tôi sẽ tự động nhận được một cửa sổ xterm xuất hiện mà tôi không muốn cũng không cần.

Làm thế nào để tôi tránh điều đó?

(Câu hỏi lấy cảm hứng từ nhận xét này của Stijn Vanpoucke về Stack Overflow)

Câu trả lời:


5

Có vẻ như hành vi của startxwin đã thay đổi kể từ khi @me_and ban đầu trả lời câu hỏi, vì vậy chỉ cần tạo một .startxwinrc trống trong thư mục chính của bạn sẽ không hoạt động nữa.

Tôi tìm thấy một câu trả lời ở đây . Về bản chất khi lệnh cuối cùng trong .startxwinrc thoát, máy chủ sẽ thoát. Nếu bạn muốn ngăn chặn điều đó, bạn có thể đặt đây là dòng cuối cùng trong .startxwinrc:

sleep inf

Điều này sẽ không bắt đầu bất kỳ chương trình máy khách nào, nhưng cũng sẽ ngăn .startxwinrc thoát.


1
Vì một số lý do, điều này không hiệu quả với tôi. Tôi đã phải gõ: exec sleep infinitynhư được hiển thị ở đây: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

CẬP NHẬT : Câu trả lời này đã hết hạn. Để biết câu trả lời cập nhật, hãy xem câu trả lời của người dùng551570 bên dưới .

Từ man startxwin:

Nếu không có chương trình máy khách cụ thể nào được đưa ra trên dòng lệnh, startxwinsẽ tìm tệp trong thư mục chính của người dùng được gọi .startxwinrcđể chạy dưới dạng tập lệnh shell để khởi động chương trình máy khách. Nếu không có tệp nào như vậy tồn tại, startxwinsẽ sử dụng như sau làm mặc định:

xterm  -geometry  +1+1  -n  login  -display  :0

Do đó, để tránh việc bất kỳ chương trình nào khởi động khi bạn khởi động X Server, bạn muốn có một .startxwinrctệp trống . Chỉ cần chạy như sau từ một dấu nhắc Cygwin:

touch ~/.startxwinrc

1
Giải pháp này đã tốt trong một thời gian dài, nhưng bây giờ với bản cập nhật cuối cùng thì không. Sử dụng một .startxwinrckết quả trống trong sự biến mất ngay lập tức của máy chủ X. :-(
Notinlist 23/1/2015

1
@Notinlist Vậy là có. Điều đó hơi buồn. Tôi sẽ thử và điều tra và tìm một giải pháp mới; Có vẻ như hệ thống bây giờ phức tạp hơn một chút và tôi không thể tìm ra cách thức hoạt động của nó một cách tầm thường
me_and 23/1/2015

3

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:

  1. Bạn gọi startxwin
  2. 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)
  3. startxwin thiết lập một số tham số máy khách và máy chủ
  4. 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.
  5. xinit khởi động máy chủ X, chạy một số tập lệnh RC
  6. 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
  7. 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 startxwinxinitthự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ó).


0

Tôi đã tạo thói quen khởi động Cygwin X bằng startxwin (.exe). Tệp .startxwinrc của tôi đọc như sau:

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

Cho đến nay, nó đã làm việc. Lỗi duy nhất tôi nhận thấy lo ngại màn hình vẫn bị "mở" bởi một quy trình X khác. Lỗi này chỉ định một tệp nhất định mà máy chủ X tạo theo mặc định cho mỗi phiên. Mọi người Cygwin nhận thức được rằng nó không bị xóa khi phiên kết thúc.

Vì vậy, tôi đã viết một bí danh để "chữa trị" rằng:

alias freex='rm /tmp/.X0-lock'

Tôi đặt cùng một dòng - phần ở giữa các dấu ngoặc kép, ở bất kỳ giá nào - trong các tệp .bashrc và .bash_profile của tôi trong trường hợp tôi nên quên tự làm.

HTH.

BZT


Đây thực sự không phải là một câu trả lời cho câu hỏi này; với cách viết lại có thể, nhưng tôi nghĩ rằng điều này sẽ phù hợp hơn như một câu hỏi và câu trả lời riêng biệt (như tôi đã làm ở đây) về việc xử lý lỗi bạn đang gặp. Sau đó, bạn có thể liên kết đến câu hỏi đó trong các ý kiến ​​cho câu hỏi này.
me_ và
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.