Cygwin'in XWin Sunucusunun xterm'i otomatik olarak başlatmasını nasıl önleyebilirim?


12

Cygwin'in X sunucusunu Başlat menümdeki "XWin Sunucusu" bağlantısını kullanarak veya startxwinbir Cygwin kabuğundan çalıştırarak başlattığımda , otomatik olarak bir xterm penceresinin görünmesini isterim.

Bundan nasıl kaçınırım?

(Soru esinlenerek Bu yoruma göre Stijn Vanpoucke Yığın taşması üzerine)

Yanıtlar:


5

@Me_ve başlangıçta soruyu cevapladığından beri startxwin'in davranışı değişmiş gibi görünüyor, bu yüzden sadece ana dizininizde boş bir .startxwinrc oluşturmak artık işe yaramayacak.

Burada bir cevap buldum . Özünde .startxwinrc dosyasındaki son komut çıktığında, sunucu çıkacaktır. Bunu önlemek istiyorsanız, bunu .startxwinrc dosyanızdaki son satır olarak koyabilirsiniz:

sleep inf

Bu herhangi bir istemci programı başlatmaz, ancak .startxwinrc dosyasının çıkmasını da engeller.


1
Nedense bu benim için işe yaramıyor. Yazmak zorunda kaldım: exec sleep infinityburada gösterildiği gibi: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

GÜNCELLEME : Bu cevap şimdi güncel değil. Güncel bir cevap için aşağıdaki user551570'in cevabına bakınız .

Gönderen man startxwin:

Komut satırında belirli bir istemci programı verilmezse startxwin, kullanıcının ana dizininde .startxwinrcistemci programlarını başlatmak için kabuk komut dosyası olarak çalıştırılacak bir dosya arar . Böyle bir dosya yoksa, startxwinvarsayılan olarak aşağıdakileri kullanır:

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

Bu nedenle, X Server'ı başlattığınızda herhangi bir programın başlatılmasını önlemek için boş bir .startxwinrcdosya istersiniz . Cygwin isteminden aşağıdakileri çalıştırmanız yeterlidir:

touch ~/.startxwinrc

1
Bu çözüm uzun bir süre iyiydi, ama şimdi son güncelleme ile değil. Boş bir .startxwinrcsunucunun kullanılması X sunucusunun derhal kaybolmasına neden olur. :-(
Notinlist

1
@Notinlist Öyle. Bu biraz üzücü. Yeni bir çözüm bulmaya çalışacağım; sistem şimdi biraz daha karmaşık gibi görünüyor, ve nasıl çalışması gerekiyordu önemsiz bir şekilde çalışamıyorum…
me_ve

3

Kasım 2014 itibariyle , aslında adlandırılan Cygwin / X sunucusunu başlatmak için en son startxwinkullanım sürümleri . Süreç böyle bir şeye gider:xinitXWin.exe

  1. Sen ara startxwin
  2. startxwinyeni bir .Xauthoritydosya ve bir dosya oluşturur .serverauth.1234( 1234X'i her başlattığınızda değişir)
  3. startxwin bazı istemci ve sunucu parametrelerini ayarlar
  4. startxwinxinitisteğe bağlı kabuk komut dosyaları ve kimlik doğrulama dosyasına bir başvuru da dahil olmak üzere istemci ve sunucu parametreleriyle çağrı yapar .
  5. xinit rc sunucusunu çalıştırarak X sunucusunu başlatır
  6. xinitistemciyi (genellikle xterm) veya istemci rc komut dosyasını başlatır . Bundan kaçınmak istiyoruz
  7. İstemciyi kapattığınızda veya istemci rc komut dosyası tamamlandığında, xinitX sunucusunu kapatır. 6. adımdan kaçınırsak, bundan da kaçınmamız gerekir

Çalıştırmak mümkündür XWin.exeçevreleyen görevler olmadan Bash giriş kabuğu içinde doğrudan startxwinve xinitgerçekleştirin. Bunun ana avantajı, istediğimiz gibi davranmasıdır: X sunucusu başlar ve çalışmaya devam eder. Ne yazık ki, .Xauthoritybaşlatma sırasında herhangi bir dosya geçirilmediğinden, X sunucunuz herhangi bir yerel işlemin ona bağlanmasına izin verir, bu da güvensizdir.

Neyse ki xinitistemediğimiz şeylerin çoğunu yapıyor. Atlayan xinitancak startxwinsunucunun kendisiyle ilgili kalan öğeleri tutan hızlı bir saldırı var .

TL; DR: İçinde startxwin, dibine yakın bir satır var:

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

Bu satırı şu şekilde değiştirin:

eval \"$server\" $display $serverargs

Bundan sonra, startxwinkomut dosyası çağırmak XWin.exeyerine doğrudan arayacaktır xinit. Açıkçası bu, herhangi bir istemci rc komut dosyasını devre dışı bırakacaktır, ancak ilk başta bunları istemedik. Ayrıca, X'in hayatta kalması için bir istemci sürecine ihtiyaç duymadan çalışmaya devam edeceği anlamına gelir (yani xinitöldürmekten kaçının).


0

Cygwin X'i startxwin (.exe) ile başlatmayı alışkanlık haline getirdim. .Startxwinrc dosyam aşağıdaki gibi okuyor:

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

Şimdiye kadar işe yaradı. Aldığım tek hata, ekranın hala başka bir X işlemi tarafından "açık" olmasıyla ilgili. Bu hata, X sunucusunun her oturum için varsayılan olarak oluşturduğu belirli bir dosyayı belirtir. Cygwin halkı, oturum sona erdiğinde silinmeyeceğinin farkındadır.

Bu yüzden "iyileştirmek" için bir takma ad yazdım:

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

Kendim yapmayı unutmamam durumunda .bashrc ve .bash_profile dosyalarımda aynı satırı - herhangi bir oranda tırnaklar arasındaki kısmı - koydum.

HTH.

BZT


Bu gerçekten bu sorunun cevabı değil; yeniden yazmak ile olabilir, ama bu gördüğünüz hatayı ele almak için ayrı bir soru ve cevap (burada yaptığım gibi) daha uygun olacağını düşünüyorum. Daha sonra bu soruya yorumlarda bu soruya bağlantı verebilirsiniz.
me_and
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.