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.)
sumber
xhost +
untuk mengizinkan pengguna mengakses layar X, apakah itu cukup? Jika demikian makaxhost +
sebagai pengguna yang memulai X danexport DISPLAY=:0
pada mesin jarak jauh harus cukup untuk mengarahkan output ke remote X dan menghemat Anda harus melihatnyaxhost +
tetapi mendapat xhost: tidak dapat membuka tampilan "". Saya kemudian mencobaexport DISPLAY=:0.0
dan mencoba lagi dan malah mendapatkannyaXlib: connection to ":0.0" refused by server
,Xlib: No protocol specified
danxhost: unable to open display ":0.0"
xhost +
darixhost +
untuk berlari sekarang. Tapi itu masih belum membantu (lihat UPDATE saya di atas).Jawaban:
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:
(Ditambahkan oleh Darren) Inilah tepatnya apa yang saya lakukan. Dalam satu sesi ssh, menjadi root, dan ketik:
Kemudian di sesi ssh lain, pengguna normal:
(Hanya menggunakan xclock sebagai ujian.)
sumber
startx
sebagai pengguna normal (ubuntu? debian?) maka cukup cnfigure sistem Anda untuk membiarkan Anda memulaistartx
sebagai pengguna normal.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:
Kemudian cukup ekspor variabel XAUTHORITY dan DISPLAY ke shell Anda dan mulai program Anda
sumber
export DISPLAY=:0;export XAUTHORITY=/var/gdm/:0.Xauth
maka saya bisa berlarixhost +
. Setelah melakukan itu saya bisa masuk sebagai pengguna normal, lakukan sajaexport DISPLAY=:0
dan sekarang saya dapat menjalankan aplikasi X!xhost +
hanya untuk pengujian cepat.xhost 127.0.0.1
lebih masuk akal, dan masih berfungsi.export XAUTHORITY
mengatakan kepada root di mana menemukan file ituxhost
akan memodifikasi.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.
sumber
export DISPLAY=:0
adalah jawaban sederhana untuk itu; segala sesuatu di sini bekerja di sekitar keamanan!