SSH: luncurkan program GUI pada layar jarak jauh, bukan tampilan X

11

Masalah

Kebanyakan orang ingin terhubung ke server melalui ssh dengan opsi "-X" untuk menjalankan program GUI pada host jarak jauh menggunakan tampilan klien. Saya ingin menjalankan program GUI pada monitor fisik yang terpasang pada server. Apakah ini mungkin? Biarkan saya lebih spesifik:

Situasi saya adalah sebagai berikut: Saya memiliki workstation tanpa keyboard atau mouse, tetapi memiliki monitor yang terhubung dengannya. Saya ingin SSH menggunakannya dengan laptop saya dan dapat meluncurkan beberapa program grafis, seperti xeyes atau ssvnc dan menampilkannya di monitor workstation.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Edit: informasi tambahan

Saya mungkin harus menjelaskan beberapa hal dengan lebih jelas:

  • Saya memiliki akses sudo di workstation, saya dapat menginstal apa pun jika diperlukan.
  • Workstation menjalankan antarmuka pengguna GNOME.
  • Sebelum melepas keyboard dan mouse dari workstation, saya masuk ke sesi GNOME. Seseorang dapat melihat desktop GNOME saya pada monitor workstation saat ini.
  • Saya tidak ingin menjalankan program dari laptop saya di workstation. Saya ingin menjalankan program workstation di workstation. Xeyes atau apa pun yang dapat dieksekusi ditemukan pada server jarak jauh dan harus dijalankan pada monitor server jarak jauh
  • Saya mengerti bahwa melakukan ini akan meninggalkan saya dalam situasi di mana kursor saya tidak akan terhubung ke antarmuka. Saya tidak dapat mengeklik sesuatu. Tidak apa-apa.

Setiap bantuan sangat dihargai!

xApple
sumber
Apakah Anda dieksekusi xhost +di server Anda?
karlphillip
Saya pikir ini juga pertanyaan yang menarik, misalnya jika Anda memiliki 3 ubuntu PC yang menjalankan Synergy untuk menggunakan keyboard dan mouse yang sama di antara 3 ... ketika Anda login Anda harus login 3 kali. alangkah baiknya untuk membuat skrip yang membuat Anda masuk ke dua PC lainnya, saat Anda masuk ke PC utama.
Sverre

Jawaban:

5

setiap aplikasi xlib harus terhubung ke xserver. Anda harus memberi tahu aplikasi koneksi ke server dengan:

  • mengatur DISPLAY variabel lingkungan
  • menggunakan bendera baris perintah seperti -display

xserver pertama biasanya dapat dijangkau oleh string koneksi ': 0'. jadi, coba ini:

xeyes -display :0

atau ini

env DISPLAY=:0 xeyes
akira
sumber
Dalam banyak kasus (seperti ketika dimulai oleh GDM GNOME), pengaturan XAUTHORITYakan diperlukan juga, karena server X11 akan menggunakan file Xauthority sementara.
grawity
Menarik, setelah menyetel variabel $ DISPLAY, saya sekarang mendapatkan, di samping pesan "Kesalahan: Tidak dapat membuka tampilan", pesan "Tidak ada protokol yang ditentukan" ketika mencoba meluncurkan xeyes.
xApple
@ kegembiraan Terima kasih atas sarannya. Bisakah saya bertanya bagaimana saya mengatur XAUTHORITY agar perintah saya berfungsi?
xApple
5

Apakah workstation ini menjalankan server X Windows? Tanpa itu, ini semua bisa diperdebatkan.

Anda perlu SESUATU untuk mengolah data menjadi grafik, piksel, warna, dan lokasi. 'Monitor' tidak berguna tanpa perangkat lunak untuk menjalankannya.

Dengan asumsi itu. (tetapi dari teks, pasti terdengar sebaliknya)

Mengingat nama host (dan resolusi DNS yang sesuai melalui / etc / hosts atau DNS atau apa pun) dari 'workstation' dan 'laptop' ... jika tidak, ganti nama host mesin dengan alamat IP yang sesuai.

ssh workstation
xhost +laptop

Anda kemudian dapat keluar dari workstation pada saat ini, karena ini menetapkan izin pada Xserver workstation untuk memungkinkan 'laptop' untuk terhubung.

jika Anda memulai program Anda dengan DISPLAY env var yang diatur dengan tepat, Anda dapat menyebabkan aplikasi ditampilkan di workstation, saat berjalan di laptop Anda.

DISPLAY=workstation:0 xeyes

-atau-

export DISPLAY=workstation:0
xeyes

metode mana pun akan bekerja, yang terakhir menyebabkan apa pun yang terkait dengan X11 ditampilkan di workstation ketika dimulai dari shell itu. (harapan itu masuk akal)

Baris 'xhost' adalah untuk mengizinkan izin laptop untuk terhubung ke Xserver workstation. Tanpanya, Anda akan mendapat izin ditolak, kecuali jika Anda memulai X server tanpa izin, yang sebenarnya tidak dianjurkan. Perlindungan 'xhost' masih timpang, karena data dikirim 'teks biasa' antara laptop dan workstation dan dapat diendus, tetapi ini adalah solusi yang mudah.

Jika Anda menginginkan privasi, Anda harus mengatur semacam terowongan terenkripsi antara laptop Anda dan workstation (port 6000 untuk tampilan: 0). Yup, itu jadi aneh saat ini.

Jika Anda berada dalam lingkungan yang terkendali, maka menggunakan perintah 'xhost + laptop' sudah cukup, jika Anda meninggalkan bagian 'laptop' dari perintah 'xhost +', maka SIAPA PUN dapat menyambung ke Xserver dan menampilkan sesuatu.

Ingat, mouse Anda TIDAK 'terhubung' ke workstation Xserver, dan Anda TIDAK akan dapat memanipulasi windows atau mengklik sesuatu.

Jika Anda ingin mouse terhubung, saya akan merekomendasikan sesuatu seperti x2x, sinergi, vnc atau aplikasi berbagi layar berbasis X Windows.

lornix
sumber
Terima kasih atas jawaban anda ! Anda benar, saya mungkin perlu menentukan beberapa hal lagi: (1) Workstation menjalankan antarmuka pengguna GNOME (2) Saya tidak ingin menjalankan program dari laptop saya. Xeyes atau apa pun yang harus dijalankan pada workstation dengan monitor workstation (3) Tidak apa-apa, saya mengerti kursor saya tidak akan terhubung.
xApple
Oh, maka Anda benar-benar hanya perlu ssh ke workstation, atur variabel DISPLAY ke 'localhost: 0' (atau hanya ': 0') dan mulai aplikasi Anda. Anda masih harus berurusan dengan izin (xhost + localhost mungkin jawaban terbaik) dan nohup, atau &! (latar belakang dan penolakan), atau bg / penolakan perintah dari shell sehingga aplikasi tidak berhenti saat Anda keluar. (kecuali itu yang Anda inginkan, tentu saja)
lornix
Ah, jadi mungkin masalah saya hanya masalah izin. Meskipun, jika saya menjalankan "xeyes" sebagai root pesan kesalahannya sama. Jika Anda mengirim jawaban yang memecahkan masalah izin, saya dapat menandainya sebagai terpecahkan!
xApple
Adakah yang masuk ke sesi X windows di workstation? Tanpa itu, kode yang mendengarkan koneksi program belum aktif, hanya hal-hal yang masuk. (Saya sangat menyederhanakan!) Coba ssh'ing ke workstation, lalu 'startx', MAKA Anda mungkin dapat terhubung ke layar. Cara lain adalah dengan menggunakan server X bare tulang, mengetik 'X: 0 &', mengatur variabel DISPLAY dan kemudian melakukan 'xhost + laptop' (atau hanya 'xhost +'). Tapi itu mendapatkan level yang agak rendah untuk sebagian besar. (Bagus untuk pengujian!)
lornix
Ya, saya masuk ke sesi GNOME di workstation sebelum memutuskan koneksi keyboard dan mouse. Namun demikian, saya mencoba menjalankan perintah "startx" dari sesi ssh saya. Pesan galatnya adalah sebagai berikut: "X: pengguna tidak diotorisasi untuk menjalankan server X, batal."
xApple