Determine if x is running

Rick Stevens ricks at nerd.com
Tue Feb 10 18:30:55 UTC 2009


Karl Pearson wrote:
> On Mon, February 9, 2009 3:25 pm, Ray Van Dolson wrote:
>> On Mon, Feb 09, 2009 at 02:21:24PM -0800, redhat at buglecreek.com wrote:
>>> I'm am writing a script that sets some various security settings on
>>> Redhat Boxes.  I would like to try to determine if a gui may be
>>> running
>>> on the box the script is run on.  If so, I would echo some additional
>>> text to stdout that instructs the user that they may required to
>>> manually perform some additional settings manually.  Things having to
>>> do
>>> with screen savers.  Anyway, I thought about the following:
>>>
>>> 1. use the runlevel command or who -r to see if the system is in
>>> runlevel 5.  This seems flawed since the box may have been started in
>>> runlevel 3 and the startx command may have been used. The commands
>>> would
>>> show runlevel 3.
>>> 2. Check if the environment variable DISPLAY is set.  If so, seems
>>> like
>>> there is a good chance that they are running a gui. (maybe)
> 
> DISPLAY is set by the user's login process, so it would be empty for a
> cron job.
> 
>>> Is there a better way to check this that anyone can think of?
>> Would it be sufficient for your needs to check is the X process is
>> running?
>>
>> Theoretically, there is probably some way to interact with a running X
>> server directly from a script (even if you're not in control of its
>> terminal) to determine if it's running.

The easiest way is a small shell script:

	#!/bin/bash
	RES=`ps ax | grep -v grep | grep -i xorg`
	if [ $? -eq 0 ]; then
		echo X is running
	else
		echo X is NOT running
	fi

(substitute the name of your X server for "xorg" if you're not running
XOrg).  On top of that, $RES will be empty if X isn't running, and will
contain the line from "ps ax" describing it if X is running.

This should work regardless of if the machine starts X by going into run
level 5 and firing up a greeter or startx from some other run level.  It
looks for the instance of the X server itself.

>> Also, X typically listens on port 6000 locally.

Not unless you TELL it to.  It will listen on local Unix domain ports, 
but not TCP/IP.

> Just run runlevel and it will return what runlevel is currently being
> run in the second response, i.e: on boot, it will show N 5 or N 3 for X
> or text depending on what's in /etc/inittab on the initdefault line.
> 
> Now then, that doesn't handle startx, but how many times might that
> actually happen. On my servers, there's no CRT/LCD, so no user will be
> running startx. They might run vncserver, however, and use an X display
> remotely. But, they better not leave it in that state, else that will be
> disabled for them. All the users in my network have Linux PCs anyway,
> and have no reason to be on the server unless they are editing a web
> page, but then they can use fish:// in Konqueror or sftp:/// in
> Nautilus.
> 
> I suspect I've confused more than helped, but ask away and someone
> smarter than me will respond.

The shell snippet I provided
----------------------------------------------------------------------
- Rick Stevens, Systems Engineer                      ricks at nerd.com -
- AIM/Skype: therps2        ICQ: 22643734            Yahoo: origrps2 -
-                                                                    -
-     I.R.S.: We've got what it takes to take what you've got!       -
----------------------------------------------------------------------




More information about the Redhat-install-list mailing list