Załóżmy, że mam 2 konta użytkowników user1
i user2
. Kiedy loguję się jako user1
, a następnie przełączam na user2
używanie su
, mogę uruchamiać programy wiersza polecenia, ale programy GUI zawodzą.
Przykład:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
Jak mogę uruchomić aplikację GUI?
$XAUTHORITY
wciąż jest ustawiony na user1~/.Xauthority
, który program, jak sądzę, spróbuje odczytać, i nie powiedzie się, ponieważ ten plik zwykle ma tryb 0600 (-rw-------
), co oznacza, że jest niedostępny do czytania przez kogokolwiek z grupy „innej”, w tym użytkownika2. Oznacza to, żechmod o+r ~/.Xauthority
(jako użytkownik1) zhakujesz sobie drogę do rozwiązania tego problemu. Napisałem skrypt, który to pokazuje.Odpowiedzi:
su vs. su -
Kiedy stajesz się innym użytkownikiem, którego zazwyczaj chcesz używać
su - user2
. Myślnik zmusi użytkownika 2.bash_profile
do uzyskania źródła.xhost
Dodatkowo musisz przyznać użytkownikom dostęp do twojego wyświetlacza. Jest to regulowane przez X. Możesz użyć tego polecenia,
xhost +
aby zezwolić innym użytkownikom na wyświetlanie GUI na pulpicie użytkownika 1.UWAGA: Podczas uruchamiania
xhost +
będziesz chciał uruchomić to w powłoce należącej do user1.WYŚWIETLACZ $
Kiedy staniesz się użytkownikiem2, może być konieczne ustawienie zmiennej środowiskowej
$DISPLAY
.źródło
xhost +user2
wciąż daje mi ten błądxhost: bad hostname "user2"
. Poszukałem go i wydaje mi się, że muszę to zrobić,xhost +user2@laptop
alboxhost +user2@localhost
nie jestem pewien, który. Potem mówixhost +user2@localhost being added to access control list
.xhost
i określeniuexport DISPLAY=:0.0
, uruchomienieleafpad
nadal daje miNo protocol specified leafpad: Cannot open display:
i nie działa. Znalazłem ten link na linuxquestions.org/questions/linux-newbie-8/... , który mówi, że są jakieś magiczne ciasteczka ixauth
. Czy przetestowałeś już, że te rzeczy działają na twoim komputerze? Może coś jest inaczej w mojej konfiguracji? Jestem na Debianie + LXDE.xhost +
działa i nic więcej nie wydaje się potrzebne (nie trzeba ustawiać$DISPLAY
). Czy możesz zaktualizować swoją odpowiedź, a ja ją zaakceptuję?xhost
daje listę w formacieSI:localuser:USERNAME
, więcxhost SI:localuser:user2
powinno działać. Aha, a wyświetlenie użytkownika można znaleźć za pomocąw
.xhost +
pozwoli każdemu użytkownikowi na dowolnym hoście, który może połączyć się z twoim X-serwerem, uzyskać dostęp do twojego ekranu.xhost +SI:localuser:user2
działa dla mnie na Debianie.Musisz udostępnić token uwierzytelniający użytkownikowi 1 (zakładając, że
~
jest to dom użytkownika 1 ):źródło
tee -a
aby uniknąć blokowania wszelkich istniejących informacji.Xauthority
.Możesz użyć przekazywania X11:
źródło
Możesz uruchomić aplikację od innego użytkownika. Uruchomię aplikację gimp od użytkownika 2, podczas gdy jestem zalogowany (GUI) z użytkownikiem 1:
(wprowadź hasło)
Cieszyć się :)
źródło
export DISPLAY
najpierw, jak mówi zaakceptowana odpowiedź)$ xhost -
Możesz spróbować użyć polecenia sux:
sux zajmie się rzeczami dla Ciebie DISPLAY. Może być konieczne zainstalowanie go z:
pod Debian / Ubuntu.
źródło
sux
nie jest już wysyłany przez Debian ani Ubuntu. Najlepszą alternatywą, jaką mogłem znaleźć, jest dodaniexhost SI:localuser:root
(lub cokolwiek innego użytkownika),~/.xprofile
aby zezwolić na to na stałe lub używaćrunuser
gksu
/gksudo
alternatywa, która działała dobrze. Będąc nadal w Sid, jest usuwany w Buster ze względów bezpieczeństwa.Alternatywnie do
sux
bezpiecznego uruchomienia polecenia graficznego (firefox-esr
w przykładzie poniżej) jako$AUTHUSER
(guest
w przykładzie poniżej):kod:
guest
użytkownikowi dostęp do bieżącego użytkownika$DISPLAY
za pośrednictwemxhost +SI:localuser:guest
ssh-askpass
graficznie, aby poprosić cię o hasło (możesz oczywiściesudoers(5)
NOPASSWD:
tego uniknąć, jeśli twoja polityka bezpieczeństwa uważa, że jest w porządku. Możesz też użyć innychaskpass
programów lub podać je w plikach konfiguracyjnych (sudo(8)
szczegółowe informacje na ten temat--askpass
)sudoers(5)
), uruchamia polecenie/usr/bin/firefox-esr
jako inny użytkownik (guest
)guest
) do uzyskania dostępu$DISPLAY
zostaną cofnięte przezxhost -SI:localuser:guest
na koniec
sudo -K
usuwa hasło z pamięci podręcznej, więc następne wywołaniessh-askpass
poprosi o hasło ponownie (zamiast używać hasła z pamięci podręcznej)Chociaż jest to niewiele więcej pracy niż co
gksu(8)
lubsux(8)
zrobione, można go skryptować i jest znacznie bezpieczniejsze niż:xhost +
(każdy użytkownik będzie miał dostęp do twojego wyświetlacza graficznego, o ile działa)gksu
/sux
did (tymczasowa kopia~/.Xauthority
, która pozwoliła określonemu użytkownikowi skopiowaćMIT-MAGIC-COOKIE-1
i kontynuować używanie twojego wyświetlacza nawet po zakończeniu gksu / sux (o ile nie zamknąłeś maszyny lub nie wylogowałeś się z ekranu - wygaszacze ekranu, hibernacja itp. nie zmieniły magii) ciastko).ponieważ pozwoli to tylko jednemu użytkownikowi lokalnemu na dostęp do twojego wyświetlacza, a następnie tylko tak długo, jak długo polecenie zostanie uruchomione (po zakończeniu polecenia
$AUTHUSER
nie będzie już w żaden sposób uzyskiwać dostępu do twojego wyświetlacza).Inną bezpieczną alternatywą jest
ssh -X
(bez-Y
których rzeczywiście sprawia, że mniej bezpieczne! ZobaczyćForwardX11Trusted
wssh_config(5)
szczegóły), ponieważ jest łatwiejszy w użyciu, jeśli nie są skryptów, ale to wywołuje additinal napowietrznych (np. Jest to wolniejsze) i niektóre programy mogą nie działać poprawnie bez niebezpiecznych-Y
.źródło
Musisz załadować interfejs instalacyjny jako użytkownik2 .
Spróbuj wykonać to:
Zaloguj się jako root :
Przetestuj serwer x:
Jeśli widzisz zegar pracujący, dobrze jest zacząć, teraz spróbuj uruchomić to:
Wynik powinien wyglądać tak:
Teraz pozwól user2 uzyskać dostęp do xhost
teraz spróbuj zalogować się ponownie do user2 i spróbuj otworzyć dowolny program GUI.
źródło
sudo su
. Użyjsudo
lubsu
; Wybierz jedno. (3) Pytanie zostało napisane w kategoriachuser1
iuser2
. Proszę wpisać odpowiedź w kategoriachuser1
iuser2
. (Rób czy nie, nie matri
.) (4) Twoja odpowiedź byłaby lepsza, gdyby zawierała wyjaśnienieSI:localuser
. ………………… Proszę nie odpowiadać w komentarzach; edytuj swoją odpowiedź, aby była jaśniejsza i bardziej kompletna.