GUI uygulamasını başka (root olmayan) bir kullanıcı olarak çalıştırma


34

Diyelim ki 2 tane kullanıcı hesabım var user1ve user2. Ben giriş yaptığında user1ve ardından geçiş user2kullanarak su, komut satırı programları çalıştırmak, ancak GUI programları başarısız.

Örnek:

user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display: 

Peki bir GUI uygulamasını nasıl çalıştırabilirim?


Bunun başarısız olmasının temel nedenlerinden biri, bunun başarısız olmasının, $XAUTHORITYkullanıcının kullanmaya ~/.Xauthorityçalıştığı ve programın okumaya çalışacağı tahmin edilen kullanıcı1'lere ayarlanmış olmasından kaynaklandığını ve bu dosyanın genellikle -rw-------kullanılamadığı anlamına gelen 0600 ( ) moduna sahip olmasından kaynaklanıyor. user2 içeren "other" grubundaki herkes tarafından okunması için. Yani eğer chmod o+r ~/.Xauthority(kullanıcı1 olarak), bu problemi çözebilirsin. Bunu gösteren bir senaryo yazdım .
Braden Best

Yanıtlar:


42

su vs. su -

Başka bir kullanıcı olunca genellikle kullanmak istersiniz su - user2. Çizgi, kullanıcı2 .bash_profilekaynak bulmak için zorlar .

xhost

Ek olarak, kullanıcıların ekranınıza erişmesine izin vermeniz gerekir. Bu, X tarafından yönetilir. Komutu xhost +, diğer kullanıcıların GUI'leri kullanıcının1 masaüstünde görüntülemesine izin vermek için kullanabilirsiniz .

NOT: çalıştırırken xhost +sen user1 ait bir kabukta hala bu süre çalıştırmak isteyeceksiniz.

$ EKRAN

Kullanıcı2 olduğunuzda, ortam değişkenini ayarlamanız gerekebilir $DISPLAY.

$ export DISPLAY=:0.0

1
xhost +user2hala bana bu hatayı veriyor - xhost: bad hostname "user2". Bazıları googledim ve yapmam gereken xhost +user2@laptopveya xhost +user2@localhosthangisi olduğundan emin değilim. Sonra diyor xhost +user2@localhost being added to access control list.
sashoalm

1
Ama birlikte kullanıcı ekledikten sonra xhost, ve belirterek export DISPLAY=:0.0, koşma leafpadhala bana verir No protocol specified leafpad: Cannot open display:ve çalıştırmak için başarısız olur. Bu bağlantıyı linuxquestions.org/questions/linux-newbie-8/… adresinde buldum , ki bazı sihirli kurabiye var xauth. Bu şeylerin bilgisayarınızda btw'de çalıştığını test ettiniz mi? Belki konfigürasyonumla ilgili farklı bir şey var mı? Debian + LXDE'deyim.
sashoalm

1
Teşekkürler, xhost +işler ve başka hiçbir şeye ihtiyaç duyulmuyor gibi görünüyor (ayarlamaya gerek yok $DISPLAY). Cevabınızı güncelleyebilir misiniz, kabul edeyim mi?
sashoalm

5
Oh, bir şey buldum. Fedora 21'de çalışan xhostbiçiminde bir liste verir SI:localuser:USERNAME, bu yüzden xhost SI:localuser:user2çalışması gerekir. Oh ve kullanıcının ekranı kullanılarak bulunabilir w.
Wilf

7
xhost +x-sunucunuza bağlanabilen herhangi bir ana bilgisayardaki herhangi bir kullanıcının ekranınıza erişmesine izin verecektir. xhost +SI:localuser:user2Debian'da benim için çalışıyor.
robartsd

9

Sen token kimlik paylaşmak gerekir user1 (varsayarak ~ev sahipliği kullanıcı1 ):

cat ~/.Xauthority | sudo -u user2 -i tee .Xauthority > /dev/null

1
Bu benim için çalışan tek cevap (Ubuntu 14).
sudo

Bu çözüm uzak makineden (= X Win istemcisi) güzel bir şekilde çalışır, diğer cevaplardaki xhost çözümlerinin yerel makinede yürütülmesi gerekir (= X Win sunucusu).
Jpsy

tee -aİçindeki mevcut bilgilerin gizlenmesini önlemek  için kullanmak daha güvenli olabilir .Xauthority.
Scott

7

X11 iletmeyi kullanabilirsiniz:

ssh -XY otheruser@localhost your-gui-program-name-here

Bu mükemmel bir çözüm. Şimdiye kadar okuduğum en basit. X 11 yapılandırmasına göre çok daha fazla kişi ssh ile aşinadır.
Alexis Panagiotopoulos

6

Uygulamayı başka bir kullanıcıdan başlatabilirsiniz. Gimp uygulamasını user2'den başlatacağım, kullanıcı 1 ile giriş yaparken (GUI):

$ xhost +
$ sudo su user2

(giriş kodunu girin)

$ gimp

Keyfini çıkarın :)


4
Bu, dört yaşındaki kabul edilen cevapla aynıdır.
G-Man

hızlı ve daha iyi bir yol söyleyebilir misin?
Antoni Stavrev

Her zaman bu yöntemi kullandım, ancak artık bana Debian ve Xfce ile çalışmıyor. ( düzeltme : işe yarıyor, ancak export DISPLAYönce kabul etmek zorunda olduğum yanıtın dediği gibi)
giusti

oturumunuzu sonlandırdıktan sonra bunu devre dışı bırakmak iyi olacaktır$ xhost -
Antoni Stavrev

4

Sux komutunu deneyebilirsiniz:

sux user2

sux sizin için $ DISPLAY ile ilgilenecek. Yüklemeniz gerekebilir:

sudo apt-get install sux

Debian / Ubuntu altında.


4
suxartık Debian veya Ubuntu tarafından sevk edilmiyor. xhost SI:localuser:root~/.xprofilerunuser
Bulabildiğim

Debian Stretch'e kadar ve dahil, iyi çalışan gksu/ gksudoalternatif vardı. Hala Sid'deyken, güvenlik sorunları nedeniyle Buster'da kaldırıldı.
Matija Nalis

0

Alternatif olarak sux, grafik komutunu güvenli şekilde çalıştırmak için ( firefox-esraşağıdaki örnekte) $AUTHUSER( guestaşağıdaki örnekte):

AUTHUSER=guest
AUTHSTRING=SI:localuser:${AUTHUSER}
xhost +${AUTHSTRING} > /dev/null
SUDO_ASKPASS=/usr/bin/ssh-askpass
export SUDO_ASKPASS
sudo -k --askpass -u ${AUTHUSER} /usr/bin/firefox-esr
xhost -${AUTHSTRING} > /dev/null
sudo -K

kod mu:

  1. verir guestmevcut kullanıcıdan kullanıcı erişimi $DISPLAYyoluylaxhost +SI:localuser:guest
  2. ssh-askpassgrafik olarak sizden şifre istemek için kullanır (elbette, sudoers(5) NOPASSWD:güvenlik politikanızın uygun olduğunu düşünüyorsanız, bundan kaçınmak için kullanabilirsiniz . Veya başka askpassprogramlar kullanabilir veya bunları config dosyalarında belirtebilirsiniz ( sudo(8)ayrıntılar için --askpass).
  3. Eğer şifre tamamsa (ve izinleriniz varsa sudoers(5)) komutu /usr/bin/firefox-esrbaşka bir kullanıcı olarak çalıştırır ( guest)
  4. Program tamamlandıktan sonra diğer kullanıcı (için izinler guesterişim), kayıt $DISPLAYyoluyla iptal edilirxhost -SI:localuser:guest
  5. Sonunda, sudo -Könbelleğe alınmış şifreyi kaldırır, bu nedenle bir sonraki çağrınızda ssh-askpasssizden tekrar şifre isteyeceksiniz (önbellek şifresini kullanmak yerine)

    ne olduğundan gksu(8)veya sux(8)ondan biraz daha fazla iş olsa da, betik yazılabilir ve aşağıdakilerden çok daha güvenlidir:

    • xhost + (herhangi bir kullanıcı yürürlükte olduğu sürece grafik ekranınıza erişebilir)
    • diğer kullanıcılar tarafından okunabilir ~ / .xauth (bu kullanıcının ekranınıza sınırsız erişimi)
    • ne gksu/ suxyaptı (geçici kopyası, ~/.Xauthoritybelirtilen kullanıcının MIT-MAGIC-COOKIE-1gksu / sux bittikten sonra bile (sizin makinenizi kapatma ve ekrandan çıkmadığınız sürece) ekranınızı kullanmaya devam etmesine izin verir . Ekran koruyucular, hazırda bekletme vb. sihri değiştirmediyse kurabiye).

yalnızca bir yerel kullanıcının ekranınıza erişmesine izin verecek ve ardından yalnızca komut çalıştığı sürece (komut bittiğinde, $AUTHUSERekranınıza hiçbir şekilde erişemez).

Başka bir güvenli alternatif ssh -X( -Yaslında sizi daha az güvende kılar! Ayrıntılar için bkz ForwardX11Trusted. ssh_config(5)), Eğer komut dosyası yazmıyorsanız kullanımı daha kolaydır, ancak ek yükü tetikler (örneğin daha yavaş) ve bazı programlar düzgün çalışmayabilir olmadan güvensiz -Y .


-1

Sen kurulum arayüzünü yüklemeye gerek kullanıcı2 .

Bunu izlemeye çalışın:

Olarak giriş kökü :

sudo su

X sunucusunu test edin:

xclock

Çalışan bir saat görüyorsanız, gitmesi iyi olur, şimdi şunu çalıştırmayı deneyin:

xhost

Sonuç şöyle olmalıdır:

xhost SI:localuser:tri
# tri is my user name

Şimdi user2'nin xhost'a erişmesine izin verin

xhost +SI:localuser:user2

şimdi tekrar user2 giriş yapmayı deneyin ve herhangi bir GUI programını açmayı deneyin.


(1) Bu soruda root olarak çalıştırmayı gerektiren veya root olarak çalıştırmanın faydası olduğu hiçbir şey yoktur. (1b) Herhangi bir şey varsa, root olarak çalışmak sadece kafa karıştırıcı olabilir. (2) Kullanmak için nadiren (hiç) bir sebep yoktur sudo su. sudoVeya  kullanın  su; birini seç. (3) soru cinsinden yazılır  user1ve  user2. Açısından cevabınızı yazınız  user1ve  user2. (Yap ya da yapma; hayır yok  tri.) (4) Bir açıklaması varsa cevabın daha iyi olurdu  SI:localuser. ………………… Lütfen yorumlara cevap vermeyin;  cevabınızı daha net ve daha eksiksiz hale getirmek için düzenleyin .
Scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.