红联Linux门户
Linux帮助

如何判断当前是处于文本模式还是gnome模式

发布时间:2011-04-14 17:44:17来源:红联作者:superherogood
我想知道如何在脚本或者C中实现判断当前处于文本模式还是gnome模式。
文章评论

共有 31 条评论

  1. age 于 2011-04-18 15:19:17发表:

    引用:
    7# age

    判断不了,都是5.
    superherogood 发表于 2011-4-18 15:06

    我后面已经修改了, 检测gnome关键进程

  2. superherogood 于 2011-04-18 15:06:51发表:

    7# age

    判断不了,都是5.

  3. gogo11 于 2011-04-17 21:50:54发表:

    runlevel不准确的,在debian系列中2~5都是启动x-windows,判断gdm更不行,我用slim或者lxdm做管理,根本没有GDM这个东西。我敢觉应该判断X服务~~~~~~~~`

  4. 日韩宫禁一 于 2011-04-17 21:18:30发表:

    看一下inittab里面的文件默认启动级别就可以了啊

  5. age 于 2011-04-17 04:20:23发表:

    引用:



    前面多有冒犯,抱歉
    yanyongkg 发表于 2011-4-17 02:36

    无关的争论到此为止, 如果是技术性的可以继续:0w5ty(1

  6. yanyongkg 于 2011-04-17 02:36:44发表:

    引用:

    也许和你的系统有关吧, 我在archlinux下测试了几百次, 也没碰到$line=0的, 始终为1
    age 发表于 2011-4-17 01:04



    前面多有冒犯,抱歉

  7. age 于 2011-04-17 01:04:17发表:

    引用:
    line=$(ps aux |grep -i gnome |wc -l);echo $line上面这个$line总是1#!/bin/bash
    line=$(ps aux |grep -i gnome |wc -l)
    echo $line放到脚本中,$line有时为1有时为0

    请指教,忘了说,我一直在文本模式下
    yanyongkg 发表于 2011-4-16 19:13

    也许和你的系统有关吧, 我在archlinux下测试了几百次, 也没碰到$line=0的, 始终为1

  8. yanyongkg 于 2011-04-16 19:13:27发表:

    [i=s] 本帖最后由 yanyongkg 于 2011-4-16 19:14 编辑 [/i]

    [code]line=$(ps aux |grep -i gnome |wc -l);echo $line[/code]上面这个$line总是1[code]#!/bin/bash
    line=$(ps aux |grep -i gnome |wc -l)
    echo $line[/code]放到脚本中,$line有时为1有时为0

    请指教,忘了说,我一直在文本模式下

  9. age 于 2011-04-16 18:58:45发表:

    [i=s] 本帖最后由 age 于 2011-4-16 19:11 编辑 [/i]

    引用:
    $line为0或1的时候是文本模式,$line>=2才有可能是gnome ,这是我们都承认的(部分gnome命令可以在文本模式下运行,我认同),>=2的时候你可以说界限是1也可以说界限是2。你看不出22楼我是一种无声的反问吗?真以为 ...
    yanyongkg 发表于 2011-4-16 18:46

    没看到你的反问在哪里, 只看到很醒目的红色高亮
    我也没觉得我那篇贴命令的贴子语气有什么冒犯你的地方
    只是实事求是的贴了下验证结果. 看到17L的言论时, 真是有种莫名其妙的感觉
    反倒是你的贴子一直给人一种咄咄逼人的感觉

    其次既然你也承认"部分gnome命令可以在文本模式下运行"
    那么你的脚本就绝对有bug的, 在上面的回贴里我也有说明了[code]$line为0或1的时候是文本模式,$line>=2才有可能是gnome [/code]这句话我是不认同的
    注: 只针对gnome2, gnome3没用过, 不作评论

  10. yanyongkg 于 2011-04-16 18:46:25发表:

    [i=s] 本帖最后由 yanyongkg 于 2011-4-16 18:52 编辑 [/i]

    网络延时了,重复了

  11. yanyongkg 于 2011-04-16 18:46:22发表:

    [i=s] 本帖最后由 yanyongkg 于 2011-4-16 20:17 编辑 [/i]

    $line为0或1的时候是文本模式,$line>=2才有可能是gnome ,这是我们都承认的(部分gnome命令可以在文本模式下运行,我认同),>=2的时候你可以说界限是1也可以说界限是2。

  12. age 于 2011-04-16 18:24:25发表:

    [i=s] 本帖最后由 age 于 2011-4-16 18:48 编辑 [/i]

    晕, 合着我上面写了那么多贴,
    你竟然完全没弄明白状况,
    好吧, 再仔细一一说明下
    1. 关于界限1, 上个贴子我已经贴出来了, 再贴一次[code]line=`ps aux |grep -i gnome |wc -l`
    变量$line为1表示当前处于gnome模式,否则就是文本模式,具体请用if函数去实现[/code]这里的原贴中明明白白的写了$line=1就是gnome状态, 这显然是不对的
    我后面给出了命令去验证这一点, $line>=2才有可能是gnome
    这还叫没给出证据, 你在后面的回贴里也承认这里写错了[code]对不起我, 我是说反了,返回1就是文本模式,否则就是gnome[/code]怎么现在反而纠住这里不放了?
    2. 如果按ps aux |grep -i gnome|wc -l 来判断, $line=0或者$line=1都不能保证就是文本状态, 这个也在上贴里说明了, 部分gnome命令是可以在文本模式下运行的.
    这点我也是验证过的, 在文本模式下运行[code]gnomevfs-monitor /media/d[/code]后, 再通过ps aux |grep -i gnome|wc -l 检测, 结果就是2. 不信你可以试试
    但我后面提的gdm判断也有可能出错, 因为可能有人通过kdm等引导. 更精确的方法应该是去检测几个关键进程是否存在.
    可以参考下这篇文章
    http://library.gnome.org/admin/system-admin-guide/stable/sessions-1.html.en
    对gnome-panel和gnome-session的检测要优于"gnome"关键字

  13. yanyongkg 于 2011-04-16 18:17:09发表:

    [i=s] 本帖最后由 yanyongkg 于 2011-4-16 18:19 编辑 [/i]

    您觉得我列出来的脚本是以2为界限的,但它是以1为界限的。当然把脚本改成以2为界限也可以实现相同的作用,因为如果在是gnome桌面环境下,$line不可能出现为2的情况,它要大于2一大截,比如你的环境下匹配出的$line=20。
    ps aux |grep -i gnome|wc -l 从进程中匹配出gnome的行,通过管道传给wc计算出行数,赋值给$line。
    在文本模式下的只有1行,不就是grep -i gnome这一行吗。把这个放到脚本中,有时会出现$line=0的情况(此种情况我也想不明白,可以在line=$(ps aux |grep -i gnome |wc -l)的下一行,加一个echo $line可以看到),所我把$line为0这种情况也加进去了。以据这个判断您有什么高见?

    您说我以1为界限是错误的,请给出证据,没经过验证请不要随便否定他人的答案。

  14. age 于 2011-04-16 17:53:25发表:

    引用:

    不同的系统的runleve都不同
    pl_014 发表于 2011-4-15 17:53

    仔细尝试了下, runlevel判断的确不准
    startx虽然切换图形模式, 但runlevel不变

  15. age 于 2011-04-16 17:17:53发表:

    [i=s] 本帖最后由 age 于 2011-4-16 17:51 编辑 [/i]

    你这和我列出来的就有什么区别, 不还是判断是否大于2吗?
    你再看看我回的那个贴子[code]line=`ps aux |grep -i gnome |wc -l`
    变量$line为1表示当前处于gnome模式,否则就是文本模式,具体请用if函数去实现[/code]这里按1为界限判断本来就是错的, 我反驳的哪里不对

    至于我后面不建议用gnome判断, 是因为部分gnome命令是可以文本模式下执行的, 比如gnomevfs-monitor, 这会给判断结果带来混乱

  16. yanyongkg 于 2011-04-16 16:05:29发表:

    18# age

    自己没验证过就下结论方法行不通,还振振有词,不知道是谁在误导人家。
    脚本在下面自己看行不行得通!

  17. age 于 2011-04-16 15:43:58发表:

    [i=s] 本帖最后由 age 于 2011-4-16 15:47 编辑 [/i]

    引用:




    看你说得头头是道,人家一个回复你要挑半天毛病,有本事你把判断的脚本写出来,人家楼主是要脚本自己去判断不是要你在这打命令来判断,如果这样用眼睛看不就知道是文本模式还是gnome模式了如必在这敲命令?
    yanyongkg 发表于 2011-4-16 12:39


    只能说你莫名其妙,
    我列出命令只是说明它的方法不可行, 这有什么错误?
    既然是讨论, 有错误就应该提出来, 否则就是误导别人
    怎么在你眼中, 这反而成了吹毛求疵,
    而且上面人也承认写反了, 怎么你倒弄出这么多意见.

    至于脚本, 就更不想说了
    只想问一句, 你会编脚本不?
    得到了$line值, 后面缺的就是一个if;判断.
    这和完全得到结果就多大区别?
    真是不可理喻

  18. yanyongkg 于 2011-04-16 12:39:23发表:

    引用:

    不止吧, 我随便试了下, 就有20
    最关键的是在这些进程中 grep -i gnome 进程是肯定有的, 因此无论如何, $line总是大于等于1的
    如[allblue@MyLady i686]$ ps aux |grep -i gnome |wc -l
    20
    [allblue@MyLady i686 ...
    age 发表于 2011-4-15 12:40




    看你说得头头是道,人家一个回复你要挑半天毛病,有本事你把判断的脚本写出来,人家楼主是要脚本自己去判断不是要你在这打命令来判断,如果这样用眼睛看不就知道是文本模式还是gnome模式了如必在这敲命令?

  19. pl_014 于 2011-04-15 17:53:30发表:

    引用:
    查看runlevel吧
    1 2 3 文本
    5 图形
    age 发表于 2011-4-14 23:25

    不同的系统的runleve都不同

  20. yanyongkg 于 2011-04-15 12:53:46发表:

    对不起我, 我是说反了,返回1就是文本模式,否则就是gnome

  21. age 于 2011-04-15 12:40:55发表:

    [i=s] 本帖最后由 age 于 2011-4-15 12:45 编辑 [/i]

    引用:
    line=`ps aux |grep -i gnome |wc -l`
    变量$line为1表示当前处于gnome模式,否则就是文本模式,具体请用if函数去实现
    yanyongkg 发表于 2011-4-15 11:42

    不止吧, 我随便试了下, 就有20
    最关键的是在这些进程中 grep -i gnome 进程是肯定有的, 因此无论如何, $line总是大于等于1的
    如[code][allblue@MyLady i686]$ ps aux |grep -i gnome |wc -l
    20
    [allblue@MyLady i686]$ ps aux |grep -i gnome
    root 1647 0.0 0.0 19616 1444 ? Sl Apr12 0:00 /usr/lib/gdm/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1
    gdm 1764 0.0 0.1 30124 2492 ? Sl Apr12 0:00 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
    allblue 1892 0.0 0.0 31532 1272 ? Sl Apr12 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
    allblue 1911 0.0 0.2 113076 5488 ? Ssl Apr12 0:00 gnome-session
    allblue 1937 0.0 0.3 36056 7056 ? Ssl Apr12 0:39 /usr/bin/gnome-settings-daemon
    allblue 1951 0.0 0.7 356096 14752 ? Sl Apr12 0:24 gnome-panel
    allblue 1986 0.1 0.5 127964 11724 ? Sl Apr12 6:00 /usr/lib/gnome-panel/wnck-applet
    allblue 1988 0.0 0.3 164032 6048 ? Sl Apr12 0:00 /usr/lib/gnome-applets/trashapplet
    allblue 1993 0.0 0.2 112804 4428 ? Sl Apr12 0:00 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
    allblue 1997 0.0 0.3 104608 6328 ? Sl Apr12 0:02 gnome-power-manager
    allblue 1999 0.0 0.1 21416 3304 ? S Apr12 0:00 /usr/lib/gnome-disk-utility/gdu-notification-daemon
    allblue 2005 0.0 0.0 30056 1788 ? Ss Apr12 0:00 gnome-screensaver
    allblue 2035 0.0 0.2 96616 5020 ? Sl Apr12 2:19 /usr/lib/gnome-applets/multiload-applet-2
    allblue 2037 0.0 0.4 197336 8784 ? Sl Apr12 0:00 /usr/lib/gnome-applets/mixer_applet2
    allblue 2039 0.0 0.6 334676 13068 ? Sl Apr12 0:05 /usr/lib/gnome-panel/clock-applet
    allblue 2041 0.0 0.2 95792 4332 ? Sl Apr12 0:02 /usr/lib/gnome-panel/notification-area-applet
    allblue 2174 11.2 0.7 286324 15600 ? Rl Apr12 568:01 gnome-system-monitor
    allblue 2177 0.0 0.5 188920 10404 ? Sl Apr12 0:58 gnome-terminal
    allblue 2181 0.0 0.0 1920 452 ? S Apr12 0:00 gnome-pty-helper
    allblue 30013 0.0 0.0 6020 836 pts/0 S+ 12:40 0:00 grep -i gnome
    [/code]注意上面的最后一行, 最好还是检测/usr/sbin/gdm吧, $line>=2, 就是启动了gnome, 否则是文本模式
    如下[code][allblue@MyLady i686]$ ps aux |grep -i /usr/sbin/gdm | wc -l
    2
    [allblue@MyLady i686]$ ps aux |grep -i /usr/sbin/gdm
    root 1644 0.0 0.0 16340 1364 ? Ssl Apr12 0:00 /usr/sbin/gdm-binary -nodaemon
    allblue 30054 0.0 0.0 6020 840 pts/0 S+ 12:44 0:00 grep -i /usr/sbin/gdm[/code]

  22. yanyongkg 于 2011-04-15 11:42:22发表:

    line=`ps aux |grep -i gnome |wc -l`
    变量$line为1表示当前处于gnome模式,否则就是文本模式,具体请用if函数去实现

  23. troonv 于 2011-04-15 07:26:33发表:

    这还用判断,呵呵,都是高技术学习人纳

  24. age 于 2011-04-15 03:21:31发表:

    引用:

    这个不一定的把?有的启动的时候在3下,然后手动startx了
    shenhao0129 发表于 2011-4-15 00:34


    runlevel不变吗? 我一直以为startx等价于init 5的
    此时已经相当于切换到runlevel 5了
    需要开启/关闭很多服务, 和runlevel 3有冲突吧

  25. superherogood 于 2011-04-14 23:27:24发表:

    那如何判断呢

  26. age 于 2011-04-14 23:25:43发表:

    查看runlevel吧
    1 2 3 文本
    5 图形

  27. superherogood 于 2011-04-14 23:20:49发表:

    算是吧,我就想知道如何用代码得到当前的模式

  28. superherogood 于 2011-04-14 23:15:49发表:

    算是吧,我就想知道如何用代码得到当前的模式

  29. superherogood 于 2011-04-14 23:14:15发表:

    算是吧,我就想知道如何用代码得到当前的模式

  30. superherogood 于 2011-04-14 23:14:08发表:

    算是吧,我就想知道如何用代码得到当前的模式

  31. chengshiding 于 2011-04-14 22:46:15发表:

    判断 gdm 服务开启了没