Konfigurasikan koneksi X melalui TCP tanpa menggunakan koneksi X

2

Saya ingin menjalankan aplikasi GUI pada mesin jarak jauh yang saya hanya memiliki akses ssh. Saya tidak perlu, atau ingin, melihat jendela GUI. (Saya tahu saya bisa menggunakan sesuatu seperti ssh -C -X remote_server jika saya ingin GUI berada di klien saya.)

Saya tahu X berjalan pada mesin jarak jauh, seperti ps menunjukkan ini:

root  ... /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7

aku menyiapkan DISPLAY=:0.0 tapi saya kemudian mendapatkan "Xlib: koneksi ke": 0.0 "ditolak oleh server" ketika saya mencoba menggunakannya.

Di Dapatkan remote x display bekerja di linux tanpa tunneling ssh dan Xserver tidak berfungsi kecuali DISPLAY = 0,0 Saya melihat saran untuk menggunakan gdmsetup untuk memungkinkan X mendengarkan TCP. Tapi, gdmsetup adalah aplikasi GUI! Dan mencoba menjalankannya di ssh -X tidak berhasil ("Koneksi X11 ditolak karena otentikasi yang salah").

Jadi, apakah ada file teks yang bisa saya edit untuk dihapus -nolisten? Dan, setelah mengeditnya, bagaimana cara me-restart X dengan aman, dari jarak jauh? (Ada hal-hal lain yang berjalan pada mesin ini, jadi meminta reboot mungkin, tetapi tidak diinginkan.) Jika tidak, harus gdmsetup dapat melindas ssh dan saya harus bertahan ke arah itu?

MEMPERBARUI: Saya harus melakukan ssh -X sesi sebagai root (ssh sebagai pengguna normal, lalu sudo atau su, tidak berfungsi.) Jadi, saya melakukan edit dengan gdmsetup. Saya kemudian memulai kembali X dengan gdm-restart. Saya juga sudah selesai xhost + dari sesi ssh -X. Baris ps tidak lagi menunjukkan -nolisten tcp bagian. Tapi tetap tidak berhasil menghubungkannya, juga DISPLAY=:0 atau DISPLAY=localhost:0

PEMBARUAN # 2: Saya hanya memperhatikan alasannya xauth + tidak membantu (ketika selesai ssh -X ) apakah itu mengubah mesin klien saya, bukan server jauh! Ups. Kerja bagus saya ada di dalam firewall! (Saya pikir alasan dilakukannya ini terkait dengan variabel lingkungan XAUTHORITY, lihat balasan Cougar.)

Darren Cook
sumber
Apakah mesin jarak jauh aman - bisakah Anda menjalankannya saja xhost + untuk mengizinkan pengguna mengakses layar X, apakah itu cukup? Jika demikian maka xhost + sebagai pengguna yang memulai X dan export DISPLAY=:0 pada mesin jarak jauh harus cukup untuk mengarahkan output ke remote X dan menghemat Anda harus melihatnya
Paul
Terima kasih @ Paul Sebagai root (over ssh) saya lakukan xhost + tetapi mendapat xhost: tidak dapat membuka tampilan "". Saya kemudian mencoba export DISPLAY=:0.0 dan mencoba lagi dan malah mendapatkannya Xlib: connection to ":0.0" refused by server, Xlib: No protocol specified dan xhost: unable to open display ":0.0"
Darren Cook
Sementara server X dimiliki oleh root, hampir pasti tidak memulainya, ia berjalan sebagai suid root. Salah satu akun pengguna normal akan memulai X dan itu adalah akun yang perlu Anda lakukan xhost + dari
Paul
Terima kasih @Paul. Mungkin me-restart gdm sebagai root sudah cukup untuk memungkinkan xhost + untuk berlari sekarang. Tapi itu masih belum membantu (lihat UPDATE saya di atas).
Darren Cook

Jawaban:

2

karena sepertinya Anda ingin aplikasi Anda dilampirkan ke sesi root yang dimiliki sekarang: gdm - layar login

mengapa Anda tidak meluncurkan xserver dan program Anda sendiri:

%> startx /your/program -- :1

(Ditambahkan oleh Darren) Inilah tepatnya apa yang saya lakukan. Dalam satu sesi ssh, menjadi root, dan ketik:

startx -- :1 &
export DISPLAY=:1
xhost + &

Kemudian di sesi ssh lain, pengguna normal:

export DISPLAY=:1
xclock

(Hanya menggunakan xclock sebagai ujian.)

akira
sumber
Terima kasih @ akira. Saya tidak dapat startx sebagai pengguna normal, dan tidak ingin menjalankan aplikasi saya sebagai root, jadi gunakan dua jendela. Mengedit jawaban Anda sepertinya tempat terbaik untuk menggambarkan bagaimana saya melakukan itu; Saya harap Anda tidak keberatan :-)
Darren Cook
@ Darren Disetujui - Saya pikir itu bagus, selalu baik untuk memiliki contoh praktis.
slhck
jika Anda tidak dapat memulai startx sebagai pengguna normal (ubuntu? debian?) maka cukup cnfigure sistem Anda untuk membiarkan Anda memulai startx sebagai pengguna normal.
akira
1

Jika Anda hanya perlu menyambungkan ke tampilan X yang dijalankan dari jarak jauh dan memulai program Anda maka itu hanyalah masalah otorisasi yang Anda miliki. Sekarang tergantung bagaimana otorisasi diatur.

Salah satu caranya adalah dengan menggunakan xhost dan memberikan izin per IP tetapi ini sangat tidak aman karena setiap program yang berjalan pada mesin ini (atau mesin apa pun jika Anda hanya menggunakan +) dapat secara otomatis terhubung dengan server X dislpay Anda.

Cara yang umum adalah dengan menggunakan file otoritas X. Maka Anda hanya perlu mengetahui file ini dan memiliki akses ke sana. Sekarang tergantung pada distribusi apakah file ini .Xauthority di direktori home Anda atau apakah itu file sementara yang disiapkan setiap kali Anda memulai sesi X.

Dalam kasus pertama semuanya bekerja di luar kotak, dalam kasus terakhir Anda perlu tahu nama file sementara ini. Salah satu cara untuk mengetahuinya adalah dengan melihat variabel XAUTHORITY di lingkungan beberapa program (seperti windowmanager) yang sudah berjalan di bawah server X Anda. Anda bisa mendapatkan variabel lingkungan dengan mudah dari / proc / PID / file environment seperti ini:

cat /proc/12345/environ | xargs -0 -L 1 echo | grep XAUTHORITY

Kemudian cukup ekspor variabel XAUTHORITY dan DISPLAY ke shell Anda dan mulai program Anda

Cougar
sumber
Terima kasih @Cougar, itu berhasil. Saya menemukan centos menyimpan file itu di / var / gdm. Sebagai pengguna normal yang mengekspor XAUTHORITY tidak membantu. Jadi, apa yang sebenarnya saya lakukan adalah, sebagai root, export DISPLAY=:0;export XAUTHORITY=/var/gdm/:0.Xauth maka saya bisa berlari xhost +. Setelah melakukan itu saya bisa masuk sebagai pengguna normal, lakukan saja export DISPLAY=:0 dan sekarang saya dapat menjalankan aplikasi X!
Darren Cook
P.S. xhost + hanya untuk pengujian cepat. xhost 127.0.0.1 lebih masuk akal, dan masih berfungsi.
Darren Cook
Mengapa Anda perlu xhost jika Anda dapat memberikan XAUTHORITY langsung ke aplikasi Anda? ;-)
Cougar
Tidak yakin tentang smiley, tetapi jika itu adalah pertanyaan serius, pemahaman saya adalah export XAUTHORITY mengatakan kepada root di mana menemukan file itu xhost akan memodifikasi.
Darren Cook
Masalah dengan xhost adalah bahwa ia memberikan akses ke semua program yang berasal dari alamat IP itu. Anda tidak perlu membuka akses dengan xhost jika Anda sudah tahu XAUTHORITY. xhost dapat digunakan di lingkungan yang sangat tertutup dan terkontrol tetapi bahkan kemudian saya akan mencoba menghindarinya.
Cougar
0

Sepertinya Anda akan berusaha keras untuk membuatnya bekerja. Sebagai alternatif, saya dapat merekomendasikan menginstal FreeNX pada mesin jarak jauh dan mengaksesnya dengan NXClient. Anda akan mendapatkan desktop jarak jauh penuh melalui ssh dan Anda dapat membuka jendela terminal dan menjalankan aplikasi Anda. Ini akan memakan waktu lebih sedikit daripada mencoba mencari tahu tunneling dengan ssh.

dtoubelis
sumber
Terima kasih @doubelis. Itu adalah jawaban yang menarik untuk pertanyaan yang berbeda (saya pikir VNC juga digunakan untuk ini?); juga ssh tunneling berfungsi dengan baik. Pertanyaannya di sini adalah bagaimana memulai aplikasi lebih dari ssh ketika aplikasi itu bersikeras ingin menunjukkan jendela (meskipun saya tidak ingin atau perlu melihat jendelanya). export DISPLAY=:0 adalah jawaban sederhana untuk itu; segala sesuatu di sini bekerja di sekitar keamanan!
Darren Cook
@ Darren Cook: Saya tidak mencoba menjawab pertanyaan Anda dengan sendirinya melainkan untuk menawarkan solusi alternatif untuk masalah Anda. Saya pribadi menemukan ssh tunneling menjadi rumit dan saya biasanya memilih solusi yang lebih sederhana. Dan, ya VNC adalah alternatif lain tetapi tidak sebagus FreeNX.
dtoubelis