Bagaimana cara saya mencegah Server XWin Cygwin secara otomatis memulai xterm?

12

Setiap kali saya memulai server X Cygwin menggunakan tautan "Server XWin" di menu Start saya, atau dengan menjalankan startxwindari shell Cygwin, saya secara otomatis mendapatkan jendela xterm yang muncul, yang tidak saya inginkan atau butuhkan.

Bagaimana saya menghindarinya?

(Pertanyaan terinspirasi oleh komentar ini oleh Stijn Vanpoucke di Stack Overflow)

saya dan
sumber

Jawaban:

5

Tampaknya perilaku startxwin telah berubah sejak @me_and awalnya menjawab pertanyaan, jadi cukup membuat .startxwinrc kosong di direktori home Anda tidak akan berfungsi lagi.

Saya menemukan jawaban di sini . Intinya ketika perintah terakhir di .startxwinrc keluar, server akan keluar. Jika Anda ingin mencegahnya, Anda bisa meletakkan ini sebagai baris terakhir di .startxwinrc Anda:

sleep inf

Ini tidak akan memulai program klien apa pun, tetapi juga akan mencegah .startxwinrc keluar.

josmith42
sumber
1
Untuk beberapa alasan ini tidak berhasil untuk saya. Saya harus mengetik: exec sleep infinityseperti yang ditunjukkan di sini: x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero
17

UPDATE : Jawaban ini sekarang kedaluwarsa. Untuk jawaban terkini, lihat jawaban user551570 di bawah ini .

Dari man startxwin:

Jika tidak ada program klien tertentu yang diberikan pada baris perintah, startxwinakan mencari file di direktori home pengguna yang dipanggil .startxwinrcuntuk dijalankan sebagai skrip shell untuk memulai program klien. Jika tidak ada file seperti itu, startxwinakan menggunakan yang berikut ini sebagai default:

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

Jadi, untuk menghindari memulai program apa pun ketika Anda memulai X Server, Anda ingin yang kosong .startxwinrc file . Jalankan saja yang berikut dari prompt Cygwin:

touch ~/.startxwinrc
saya dan
sumber
1
Solusi ini bagus untuk waktu yang lama, tetapi sekarang dengan pembaruan terakhir tidak. Menggunakan .startxwinrchasil kosong dalam penghilangan langsung X server. :-(
Notinlist
1
@Notinlist Begitu juga. Itu agak menyedihkan. Saya akan mencoba dan menyelidiki dan menemukan solusi baru; kelihatannya sistemnya sekarang agak lebih rumit, dan saya tidak bisa dengan mudahnya mencari tahu bagaimana seharusnya bekerja ...
me_and
3

Pada November 2014 , versi terbaru dari startxwinpenggunaan xinituntuk memulai server Cygwin / X, yang sebenarnya disebut XWin.exe. Prosesnya kira-kira seperti ini:

  1. Kamu panggil startxwin
  2. startxwinmembuat .Xauthorityfile baru dan yang disebut.serverauth.1234 (di mana 1234berubah setiap kali Anda memulai X)
  3. startxwin mengatur beberapa parameter klien dan server
  4. startxwin panggilan xinit dengan parameter klien dan server, termasuk beberapa skrip shell opsional dan referensi ke file auth.
  5. xinit memulai X server, menjalankan beberapa skrip rc
  6. xinitmemulai xtermskrip klien (biasanya ) klien atau klien.Kami ingin menghindari ini
  7. Ketika Anda menutup klien atau skrip rc klien selesai, xinitmatikan X server. Jika kita menghindari langkah 6, kita juga harus menghindari ini

Dimungkinkan untuk menjalankan XWin.exelangsung dari dalam shell login Bash, tanpa tugas di sekitarnya startxwindanxinit melakukan. Keuntungan utama dari ini adalah berperilaku seperti yang kita inginkan: X server mulai dan tetap berjalan. Sayangnya, karena tidak ada .Xauthorityfile yang diteruskan saat startup, server X Anda akan mengizinkan proses lokal untuk terhubung, yang tidak aman.

Untunglah itu xinitmelakukan sebagian besar hal yang tidak kita inginkan. Ada peretasan cepat yang memintas xinittetapi menjaga elemen yang tersisastartxwin terkait dengan server itu sendiri.

TL; DR: Di startxwin, ada garis di dekat bagian bawah yang berbunyi:

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

Ubah baris itu menjadi:

eval \"$server\" $display $serverargs

Mulai sekarang, startxwinskrip akan memanggil XWin.exelangsung, bukan menelepon xinit. Jelas ini akan menonaktifkan skrip rc klien, tetapi kami tidak menginginkannya terlebih dahulu. Ini juga berarti bahwa X akan terus berjalan tanpa perlu proses klien untuk membuatnya tetap hidup (yaitu tetap tidak xinitmembunuhnya).

Ethan T
sumber
0

Saya sudah terbiasa memulai Cygwin X dengan startxwin (.exe). File .startxwinrc saya berbunyi sebagai berikut:

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

Sejauh ini berhasil. Satu-satunya kesalahan yang saya dapatkan menyangkut tampilan masih "terbuka" oleh proses X lainnya. Kesalahan ini menentukan file tertentu yang dihasilkan server X secara default untuk setiap sesi. Orang-orang Cygwin sadar bahwa itu tidak bisa dihapus ketika sesi berakhir.

Jadi saya menulis alias untuk "menyembuhkan" itu:

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

Saya meletakkan baris yang sama - bagian di antara tanda kutip, pada tingkat apa pun - dalam file .bashrc dan .bash_profile saya jika saya lupa melakukannya sendiri.

HTH.

BZT

SilversleevesX
sumber
Ini sebenarnya bukan jawaban untuk pertanyaan ini; dengan menulis ulang itu bisa saja, tetapi saya pikir ini akan lebih cocok sebagai pertanyaan dan jawaban yang terpisah (seperti yang saya lakukan di sini) tentang menangani kesalahan yang Anda lihat. Anda kemudian dapat menautkan ke pertanyaan itu di komentar yang satu ini.
me_and