Saya mencoba menggunakan pengguna alternatif (non-admin) untuk menjalankan perangkat lunak grafis pada sistem saya. Pengguna alternatif ini telah diberi nama dan diberi UID dan GID untuk mencocokkan pengguna sistem jarak jauh dengan nama yang sama. UID adalah 500 jadi saya percaya itu membuat pengguna menjadi pengguna 'non-login'.
Mulai dari Ubuntu masuk ke akun utama saya, saya membuka terminal dan su
ke pengguna alternatif. Saya kemudian mencoba untuk mengeksekusi perintah untuk memulai aplikasi dan menerima 'Tidak ada protokol yang ditentukan'.
Apakah ini karena UID <1000, karena su
atau karena non-admin pengguna? Bagaimana saya bisa membuat pengguna ini menjalankan aplikasi dengan GUI?
sumber
xauth list >/tmp/xa.$$; su - <otheruser> -c "unset XAUTHORITY; xargs xauth add </tmp/xa.$$"; rm -f /tmp/xa.$$
tetapi waspadai ada kondisi balapan yang mengerikan di sana.su
ingin meminta kata sandi. Coba perintah baru ini.Saya kasus server tampilan baru
wayland
masalahnya,lakukan saja
xhost + local:
maka pengguna lain (mis. root) diizinkan untuk menjalankan Programms di sesi Anda, namun koneksi jaringan tidak akan diizinkan.Jika Anda ingin mengizinkan klien dari host mana pun , Anda dapat menggunakan
xhost +
tanpa menentukan host apa pun. Namun ini tidak aman , akan lebih baik untuk menentukan host yang ingin Anda akses ke sesi Anda.sumber
xhost +
sudah cukupMisalkan Anda ingin secara brutal mendapatkan koneksi ke X ...
Mari kita asumsikan Anda sudah menjalankan perintah Anda di server (di mana X berjalan), jika tidak, jalankan terlebih dahulu dan kemudian gunakan 'ssh -X user @ server) dari klien sesudahnya;).
Mungkin ada beberapa cara untuk menjalankan perintah xauth, misalnya, Anda mungkin menggunakan 'sudo', tetapi itu mungkin kehilangan atau mengubah variabel lingkungan. Variabel lingkungan berikut perlu dipertahankan: DISPLAY dan XAUTHORITY. Untuk menguji apakah itu yang terjadi, Anda dapat menjalankan 'echo $ XAUTHORITY' dengan cara yang sama dengan Anda menjalankan perintah, tetapi pastikan Anda tidak memperluas variabel lingkungan sebelum menjalankan perintah itu. Sebagai contoh, coba: sudo bash -c 'echo "$ XAUTHORITY"' untuk melihat apa sebenarnya XAUTHORITY setelah Anda menjalankan sudo Anda (jika hilang Anda mungkin perlu menambahkan sesuatu ke file sudoers Anda, lihat di tempat lain).
Akhirnya, jalankan perintah berikut sebagai pengguna yang ingin Anda akses, di server:
xauth info
Ini akan menampilkan 'File otoritas' yang akan digunakan (/root/.Xauthority secara default, untuk root, atau sesuatu seperti /home/theuser/.Xauthority). Jika itu menunjukkan file .Xauthority yang benar maka Anda tidak perlu khawatir tentang variabel lingkungan XAUTHORITY sebenarnya (sebenarnya, saya tidak akan tahu kapan tidak, kecuali jika Anda ingin memanipulasi tempat non-standar file itu. ).
Hapus file itu (jika memang ada):
rm /root/.Xauthority
Ganti
/root/.Xauthority
dengan file XAUTHORITY yang benar untuk kasus Anda.Buat kembali, tetapi kosong (ini diperlukan untuk banyak perintah):
touch /root/.Xauthority
Pada titik ini Anda akan mendapatkan kesalahan protokol khusus , bahkan jika sebelumnya Anda mendapatkan MIT-MAGIC-COOKIE-1 yang tidak valid . Temukan file otoritas yang digunakan server X saat ini:
ps aux | grep Xorg
Ini harus menunjukkan sesuatu seperti:
root 1153 0.0 1.0 149560 44464 tty7 Ss+ dec02 0:00 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711} -background none -noreset -displayfd 17 vt7
Nama file setelah
-auth
adalah apa yang Anda butuhkan dalam perintah selanjutnya. Jalankan ini sebagai root:sudo xauth -f '/var/run/sddm/{ef18c483-7891-4e82-80ef-2c8f9bd79711}' list
Itu mencantumkan kunci heksadesimal 32 digit. Misalnya outputnya bisa:
hostname/unix:0 MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
Gunakan itu untuk menghasilkan file .Xauthority Anda (sebagai pengguna yang perlu masuk lagi):
xauth add $DISPLAY MIT-MAGIC-COOKIE-1 c0eaf749aa252101a0f57d5087089db7
ganti 'c0eaf749aa252101a0f57d5087089db7' dengan apa yang dikembalikan oleh perintah daftar untuk Anda. Sekarang .Xauthority Anda seharusnya berukuran 51 byte dan Anda dapat terhubung ke server X (lagi).
sumber
Coba sesuatu seperti itu
sumber
Ps : jawaban yang diterima tidak berhasil untuk saya
sumber
Saya mengalami kesalahan ini "Tidak ada protokol yang ditentukan" ketika saya memulai instance Selenium 3.3.1 dari skrip pemula dan kemudian menggunakan driver Chrome di Selenium. Selenium berjalan sebagai pengguna yang sama dengan X11, dan variabel lingkungan shell DISPLAY diatur dengan benar. Yang menarik adalah bahwa kesalahan ini tidak terjadi ketika saya menggunakan driver Firefox. Mengatur variabel lingkungan shell XAUTHORITY di dalam skrip pemula untuk menunjuk ke nilai $ XAUTHORITY dari pengguna X11 aktif memperbaiki kesalahan driver Chrome.
Di samping catatan, kesalahan "Tidak ada protokol yang ditentukan" sepenuhnya dikubur oleh driver Chrome / Chrome dan tidak mudah ditemukan. Saya perhatikan bahwa Chrome terus membuat direktori dalam pola
/tmp/.org.chromium.Chromium.*
, tetapi mereka dengan cepat menghilang. Saya berhasil melihat bahwa mereka berisi filechrome_debug.log
yang memiliki pesan "Tidak dapat membuka tampilan". Saya pikir ini agak aneh karena saya telah memverifikasi bahwa proses Selenium memiliki DISPLAY yang benar/proc/$pid/environ
dan memeriksa outputstrace
pada proses Selenium lebih menyeluruh, yang mengungkapkan "Tidak ada protokol yang ditentukan" yang akhirnya membawa saya ke pertanyaan ini.Kesalahan ini dapat direproduksi dengan membatalkan XAUTHORITY dan mencoba menjalankan beberapa klien X11. Sebagai contoh:
sumber
Ini sederhana. Masalahnya terjadi ketika Anda berada di root sate dan ingin menggunakan gksu Cukup keluar dari kondisi root dan coba lagi
sumber
Cukup ketik ini di terminal Anda
xhost +SI:localuser:root
setelah itu Anda ketikexport DISPLAY=:0.0
kemudian coba lagisumber
Dengan menggunakan petunjuk dalam jawaban yang diterima, saya dapat memecahkan masalah secara berbeda:
Dalam kode:
sumber
Katakanlah Anda mencoba mengakses GUI sebagai user2 ( pengguna normal ), maka Anda perlu memuat UI instalasi sebagai user2 .
Coba ikuti ini:
Masuk sebagai root :
Uji x server:
Jika Anda dapat melihat jam berjalan, itu bagus, sekarang coba jalankan ini:
Hasilnya harus seperti ini:
Sekarang, biarkan user2 mengakses xhost
sekarang coba masuk lagi ke user2 dan coba buka salah satu program GUI.
sumber