it-swarm-eu.dev

Existuje příkaz k zobrazení všech otevřených obrazovek na počítači?

Když SSH lokálně do mého počítače (neptejte se, je to řešení), nemůžu spustit grafické aplikace bez spuštění:

export DISPLAY=:0.0

Pokud spustím toto první a poté grafickou aplikaci, vše dopadne. Pokud ne, nefunguje to, není k dispozici žádný displej, ke kterému se lze připojit.

Existuje příkaz pro výpis všech dostupných displejů (tj .: všechny možné hodnoty) na počítači?

78
Naftuli Kay

Pokud chcete přesměrovat připojení X přes SSH, musíte jej povolit na straně serveru i klienta. (V závislosti na distribuci může být ve výchozím nastavení povoleno nebo zakázáno.) Na straně serveru se ujistěte, že máte X11Forwarding yes V /etc/sshd_config (nebo /etc/ssh/sshd_config Nebo kdekoli je konfigurační soubor). Na straně klienta předejte možnost -Xssh příkaz , nebo vložte do svého ForwardX11~/.ssh/config .

Pokud spustíte ssh -X localhost, Měli byste vidět, že $DISPLAY Je (pravděpodobně) localhost:10.0. Kontrast s :0.0, Což je hodnota, když nejste připojeni přes SSH. (Část .0 Může být vynechána; je to číslo obrazovky, ale více obrazovek se používá zřídka.) Existují dvě formy X displejů, s nimiž se pravděpodobně setkáte:

  • Místní displeje, s ničím před :.
  • Zobrazí se TCP s názvem hostitele před :.

S ssh -X localhost Můžete přistupovat k X serveru přes obě displeje, ale aplikace budou používat jinou metodu: :NUMBER Přistupuje k serveru prostřednictvím lokálních soketů a sdílené paměti, zatímco HOSTNAME:NUMBER přistupuje k serveru přes TCP, což je pomalejší a deaktivuje některá rozšíření.

Nezapomeňte, že pro přístup k serveru X potřebujete formu autorizace nazvanou cookie a obvykle uloženou za scénami v souboru ~/.Xauthority. Pokud používáte ssh pro přístup k jinému uživatelskému účtu nebo pokud vaše distribuce umístí soubory cookie do jiného souboru, možná zjistíte, že DISPLAY=:0 Nefunguje v relaci SSH (ale ssh -X, pokud je to povoleno na serveru; při provádění ssh -X nemusíte nikdy mluvit s XAUTHORITY. Pokud se jedná o problém, musíte nastavit proměnnou prostředí XAUTHORITY nebo získat soubory cookie jiného uživatele .

Chcete-li odpovědět na aktuální otázku:

  • Místní displeje odpovídají soketu v /tmp/.X11-unix.

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • Vzdálené displeje odpovídají otevřeným TCP portům nad 6000; přístup k zobrazovacímu číslu N na počítači M se provádí připojením k portu TCP 6000 + N na počítači M. Ze samotného stroje M:

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (Zbytek této odrážky je pouze v akademickém zájmu.)

    Z jiného počítače můžete pomocí nmap -p 6000-6099 Host_name Zkoušet otevřené TCP porty v obvyklém rozsahu. Dnes je vzácné, že X servery poslouchají na soketu TCP, zejména mimo rozhraní zpětného smyčky.

    Přesně řečeno, jiná aplikace by mohla používat port v rozsahu obvykle používaném X servery. Můžete zjistit, zda server X poslouchá kontrolou toho, který program má port otevřený.

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    Pokud se ukáže něco dvojznačného, ​​jako je sshd, neexistuje žádný způsob, jak zjistit, zda se jedná o server X nebo náhoda.

Displej je prvním argumentem Xorg. Můžete ps potom grep Xorg out.

[[email protected] teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

Poté můžete awk do jakéhokoli formátu, který potřebujete.

16
Vitor Py
# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[Upravit: Spustil jsem Xnest instanci, abych zjistil, jestli by to chytilo - ne; zachycuje pouze přihlašovací skořepiny („w“ je zkratka pro „who“). Zpět na rýsovací prkno pro mě.] [Upravit: Nalezeno:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]

7
Fordi
ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

provede úlohu tím, že uvede všechny aktuální DISPLEJE. Také můžete vidět přiřazené displeje pro konkrétního uživatele ($ usr) s:

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
4
lenroc

V /tmp složka může také existovat .X??-lock soubory s ?? označující čísla relací.

Pokud chcete číslo relace znovu použít, musíte je odstranit.

Můžete je vidět pomocí ls -a jako obvykle soubory začínající znakem . jsou skryté.

0
user177936