Linux show all displays

How to list active displays (on command line)?

xrandr -q gives me a list of connected displays, but how can I find out (script friendly) if a display is currently active? Context: I would like to write a script to toggle a Display. If it’s active it should be turned off, if it isn’t it should be turned on. Note: xrandr -q basically provides this information since active modes are marked with a * , but this information is hard to extract within a bash script.

The Display is a TV. E.g. if I want to watch a movie the script should switch the Display to active (and set audio out to hdmi). After I watched the movie the script should turn the display of (and set audio out back to built in speakers). But the script should decide by itself what to do, therefore it needs the current state of the display.

If the TV is active, the scirpt should turn it off. If the TV isn’t active the script should turn it on. And with turn on I mean the system should use it. There are three displays connected (the internal notebook display, an external monitor and the tv, but only the external moinitor is active after boot.)

Of course it needs that information. «it only has to know that you are starting or stopping watching the movie.» Exactly, and therefore the script has to know the actual state of the display. Display On: Movie is finished, set Display off. Display off: Movie will be shown, set Display to on.

There is no activator and deactivator script. There is only one script and that has do decide for it self if it should activate or deactivate the display, and for that it needs the state of the display. That’s it. I won’t discuss this any longer.

4 Answers 4

The displays that are active have their resolution and offset number shown in the identifying line of xrandr output. Here’s what I mean:

$ xrandr | grep connected eDP1 connected primary 1366x768+1280+256 (normal left inverted right x axis y axis) 345mm x 194mm DP1 disconnected (normal left inverted right x axis y axis) HDMI1 disconnected (normal left inverted right x axis y axis) VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 340mm x 270mm VIRTUAL1 disconnected (normal left inverted right x axis y axis) 

In the output you can see that my laptop’s built-in monitor and VGA1 both are connected, and have resolution ( in case of built-in display eDP1 it is 1366×768 ). Thus the task simply becomes text-processing of the output. For that purpose , I’ve written a small function that you can use in your scripts or ~/.bashrc :

Читайте также:  Linux on arm devices

Источник

Как вывести список активных дисплеев (в командной строке)?

xrandr -q дает мне список подключенных дисплеев, но как я могу узнать (с учетом сценариев), активен ли дисплей в настоящее время?

Контекст: я хотел бы написать скрипт для переключения дисплея. Если он активен, его следует отключить, если нет — включить.

Примечание: xrandr -q в основном предоставляет эту информацию, поскольку активные режимы помечены * , но эту информацию трудно извлечь в скрипте bash.

3 ответа

Активные дисплеи имеют разрешение и номер смещения, показанные в идентификационной строке на выходе xrandr . Вот что я имею в виду:

$ xrandr | grep connected eDP1 connected primary 1366x768+1280+256 (normal left inverted right x axis y axis) 345mm x 194mm DP1 disconnected (normal left inverted right x axis y axis) HDMI1 disconnected (normal left inverted right x axis y axis) VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 340mm x 270mm VIRTUAL1 disconnected (normal left inverted right x axis y axis) 

В выходных данных вы видите, что встроенный монитор моего ноутбука и VGA1 оба подключены и имеют разрешение (в случае встроенного дисплея eDP1 это 1366×768). Таким образом, задача просто превращается в обработку текста. Для этой цели я написал небольшую функцию, которую вы можете использовать в своих скриптах или ~/.bashrc :

enter image description here

С выключенным монитором VGA

Источник

How do I list connected displays using the command line?

This lists the display names and detected available resolutions. You can also reconfigure your displays using xrandr.

Note that this might not work if you’re using the NVidia or ATI drivers; I’m not sure.

xrandr only works when you run it under X-windows. After all, it is X that handles all but the most basic video drivers. If you are in a terminal inside X and it still doesn’t work, then you’ve most likely lost your $DISPLAY environment variable, somehow.

xrandr —query | grep ‘\bconnected\b’ if you just wanted to see the connected monitors and their resolutions.

For most machines with the proprietary driver loaded, /usr/lib/nvidia-current/bin/nvidia-xconfig —query-gpu-info —nvidia-cfg-path=/usr/lib/nvidia-current works. Note that I said «with the proprietary driver loaded». For instance, it does not work if the driver is unloaded or nouveau is loaded. Therefore, when using Bumblebee, run optirun /usr/lib/nvidia-current/bin/nvidia-xconfig —query-gpu-info . The —nvidia-cfg-path part is not needed here as optirun sets the correct library path.

Читайте также:  Очистить кэш linux debian

/var/log/Xorg.0.log (where 0 is the display number) may also contain valuable information about available screens. For Optimus laptops, this log contains only details on the Intel screen, so replace 0 by 8 to find out the log from the X server started by Bumblebee.

You must log in to answer this question.

Linked

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.13.43530

Ubuntu and the circle of friends logo are trade marks of Canonical Limited and are used under licence.

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Obtaining List of all Xorg Displays

I would like to know how I can obtain a list of all Xorg displays on my system, along with a list of screens associated with each display. I spent some time looking through the Xlib documentation, but was not able to find a function that does what I want. Please assume that I have no other dependencies other than a POSIX-complaint OS and X (e.g., no GTK). If what I ask is not possible assuming these minimal dependencies, then a solution using other libraries is fine. Thank you very much for your help!

2 Answers 2

The only way I know of to get a list of displays is to check the /tmp/.X11-unix directory.

Once you do that, you can use Xlib to query each display for more information.

#include #include #include #include int main(void) < DIR* d = opendir("/tmp/.X11-unix"); if (d != NULL) < struct dirent *dr; while ((dr = readdir(d)) != NULL) < if (dr->d_name[0] != 'X') continue; char display_name[64] = ":"; strcat(display_name, dr->d_name + 1); Display *disp = XOpenDisplay(display_name); if (disp != NULL) < int count = XScreenCount(disp); printf("Display %s has %d screens\n", display_name, count); int i; for (i=0; i> closedir(d); > return 0; > 

Running the above gives me this output with my current displays/screens:

Display :0 has 1 screens 0: 3046x1050 Display :1 has 2 screens 0: 1366x768 1: 1680x1050 

Never found a better way of listing X displays other than that. I’d very much like to know if any better alternative exists.

Источник

Is there a command to list all open displays on a machine?

When SSH’d locally into my computer (don’t ask, it’s a workaround), I can’t start graphical applications without running:

If I run this first and then run a graphical application, things work out. If not, it doesn’t work, there’s no display to attach to. Is there a command for listing all available displays (ie: all possible values) on a machine?

Читайте также:  Linux which user runs process

To get that display number from a command line script, try w . More info: list existing X display names?

5 Answers 5

If you want the X connection forwarded over SSH, you need to enable it on both the server side and the client side. (Depending on the distribution, it may be enabled or disabled by default.) On the server side, make sure that you have X11Forwarding yes in /etc/sshd_config (or /etc/ssh/sshd_config or wherever the configuration file is). On the client side, pass the -X option to the ssh command, or put ForwardX11 in your ~/.ssh/config .

If you run ssh -X localhost , you should see that $DISPLAY is (probably) localhost:10.0 . Contrast with :0.0 , which is the value when you’re not connected over SSH. (The .0 part may be omitted; it’s a screen number, but multiple screens are rarely used.) There are two forms of X displays that you’re likely to ever encounter:

With ssh -X localhost , you can access the X server through both displays, but the applications will use a different method: :NUMBER accesses the server via local sockets and shared memory, whereas HOSTNAME:NUMBER accesses the server over TCP, which is slower and disables some extensions.

Note that you need a form of authorization to access an X server, called a cookie and normally stored behind the scenes in the file ~/.Xauthority . If you’re using ssh to access a different user account, or if your distribution puts the cookies in a different file, you may find that DISPLAY=:0 doesn’t work within the SSH session (but ssh -X will, if it’s enabled in the server; you never need to mess with XAUTHORITY when doing ssh -X ). If that’s a problem, you need to set the XAUTHORITY environment variable or obtain the other user’s cookies.

To answer your actual question:

    Local displays correspond to a socket in /tmp/.X11-unix .

(cd /tmp/.X11-unix && for x in X*; do echo ":$"; done) 
netstat -lnt | awk ' sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 < print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000) >' 

(The rest of this bullet point is of academic interest only.) From another machine, you can use nmap -p 6000-6099 host_name to probe open TCP ports in the usual range. It’s rare nowadays to have X servers listening on a TCP socket, especially outside the loopback interface. Strictly speaking, another application could be using a port in the range usually used by X servers. You can tell whether an X server is listening by checking which program has the port open.

Источник

Оцените статью
Adblock
detector