Determine if x is running

Rick Stevens ricks at nerd.com
Wed Feb 11 17:44:19 UTC 2009


Karl Pearson wrote:
> On Tue, February 10, 2009 11:30 am, Rick Stevens wrote:
>> 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.
>>
>>> I suspect I've confused more than helped, but ask away and someone
>>> smarter than me will respond.
>> The shell snippet I provided
> 
> HA! I knew you thought you were smarter than me! I knew you were too, by
> the way... :)

Not really, just been doing this stuff for over 30 years.  SOMETHING'S
gotta rub off!
----------------------------------------------------------------------
- Rick Stevens, Systems Engineer                      ricks at nerd.com -
- AIM/Skype: therps2        ICQ: 22643734            Yahoo: origrps2 -
-                                                                    -
-           If it's stupid and it works...it ain't stupid!           -
----------------------------------------------------------------------




More information about the Redhat-install-list mailing list