在 tty 里添加一个开机自启动的任务管理器

{ 撰文/upsuper }

每当感觉到系统卡的时候,最好的方法无外乎进入 tty,登入,打开一个 top 监视。可是每次到了需要的时候才去开,打开的效率自然不敢恭维。于是便想,每次开机的时候,记起来就跑到 tty 下面去先开起来。不过这件事情总归是麻烦的,于是才有了现在的方案。

既然 tty 那么多,那我们就把他利用一下吧~让他开机自动在某个 tty 里面启动 top 无疑最方便了~

首先呢,我找到了 Ubuntu 里面 tty 配置存放的地方 /etc/init/ttyX.conf,其中的 X 便是 tty 的编号,我这里选择了 tty6.conf。打开这个文件,结构简单极了,看到里面

exec /sbin/getty -8 38400 tty6

就知道,肯定和 getty 有关系。man getty 里面查到可以通过 -l 参数设置登入程序替代 /bin/login。查了一下 man login,发现可以通过 -f username 的方式不进行验证地登入。

于是我就在 /bin 下面新建了一个 autologin 文件(其实理论上放哪里都可以,不过最好要用 root 权限创建,不然可以乱改就不好了),里面写上

    #!/bin/sh
    /bin/login -f upsuper

给这个文件加上可执行属性,接着将 /etc/init/tty6.conf 里面刚才那一行改成

exec /sbin/getty -8 -l '/bin/autologin' 38400 tty6

重启。

进入 tty6 发现没有效果,还是提示用户名,无语……于是输入了用户名 upsuper,结果发现没有要求密码,直接进入了。我退出登入,再输入 root,发现依然没有要求密码而直接进入了 upsuper 权限。

再查查 man getty,发现那个请求用户名是 getty 输出的,里面提到了 -n 参数,可以消除对用户名的请求,以及 -i 参数,不输出请求前的文字(在我的 Ubuntu 里面就是“Ubuntu 9.10”)。于是上面那行被改成了

exec /sbin/getty -8in -l '/bin/autologin' 38400 tty6

重新启动,发现已经可以自动进入。

不过我要的不是这个效果~

其实简单地说,我那个要实现也不难,按照现在的情况,就是在 ~/.bashrc 里面加上一行判断的事情了。不过我可不想这样。这样的话如果退出了 top 就会进入命令行。我的想法是,永远不让他进入命令行,这样看过去比较爽~

于是我就倒腾起了 login 程序的 FAKE_SHELL,如果在 autologin 脚本里改变环境变量,根本影响不了 login 程序,无论我改 FAKE_SHELL,还是 SHELL,都没有用,login 仍然义无反顾地进入了 bash……

最后我就想,唉,其实 autologin 脚本就是一正常脚本,只不过在登入的时候以 root 权限运行嘛,那我直接在里面运行 top 不久行了~考虑到权限因素,就是用 su 把权限改一下,不就解决问题了么?

于是最终版的 autologin 就出炉了:

    #!/bin/sh
    su -c '/usr/bin/top' upsuper

这个最后效果是什么样的呢?就是 top 以我的用户权限运行,然后点击 q 退出就会重新启动一个 top。这就是我要得效果了~很好很强大~算是合理的利用了一个 tty 了。现在只要点击 Ctrl-Alt-F6 就可以有现成的任务管理器了~

其实根据这个思路,tty 可以做的事情还很多。本来那个什么 -l 啦,-n 什么的,是拿来做自定义登入验证方式的,我觉得这个也大有文章可做~最后再感叹一下,Linux 实在太强大了~

{ Source. Thanks upsuper. }

Read More:

14 Comments

  1. 1 绿色圣光 Commented @ 2010-03-31 11:20Reply to this comment

    咦!试试……看着挺不错……

  2. 2 bones7456 Commented @ 2010-03-31 11:24Reply to this comment

    呵呵,这个想法不错。

  3. 3 simon Commented @ 2010-03-31 11:27Reply to this comment

    htop更强大

  4. 4 hmy Commented @ 2010-03-31 11:47Reply to this comment

    不知道改用户的shell 可行不,修改/etc/passwd

  5. 5 upsuper Commented @ 2010-03-31 12:02Reply to this comment

    @hmy: 那样就变成所有的 tty 进去都是 top 啦……

  6. 6 upsuper Commented @ 2010-03-31 12:23Reply to this comment

    @simon: htop 貌似资源耗用比 top 大很多……

  7. 7 muxueqz Commented @ 2010-03-31 13:08Reply to this comment

    @upsuper:

    呵呵,不错。修改用户shell你可以单分一个用户嘛

  8. 8 Alpha.Gu Commented @ 2010-03-31 15:06Reply to this comment

    类似是事情以前做过,不过不是监视,是不用登录管理器,自动用startx方式来进入X,当时我用的是mingetty,因为当时我不知道系统默认的getty也能过自动登录。

  9. 9 walkerxk Commented @ 2010-03-31 18:42Reply to this comment

    1:2345:respawn:/sbin/getty 38400 tty1 直接把/sbin/getty改成/usr/bin/top不行?这个倒真没试过。

  10. 10 walkerxk Commented @ 2010-03-31 19:21Reply to this comment

    不过我比较喜欢退出top后进入shell,这样还能查下其他东西。

  11. 11 upsuper Commented @ 2010-03-31 20:16Reply to this comment

    @walkerxk: 那样 top 是 root 权限……你敢么……至于 shell 我主要是因为这个作为一个常驻的任务管理器,其他的 tty 还可以照常用嘛……

  12. 12 upsuper Commented @ 2010-03-31 20:17Reply to this comment

    @muxueqz: 单独分一个用户不久没意义了……什么都管理不了

  13. 13 walkerxk Commented @ 2010-05-17 21:25Reply to this comment

    @upsuper: 其他tty是下面的行设置的,和这行没关系,而且就一个top,又不是rm什么的,使用root权限又没关系,如果一个sudo的进程卡死了你的桌面,你用一般的top还杀不死呢。

  14. 14 Ranousaduah Commented @ 2010-11-30 17:37Reply to this comment

    [url=http://www.proemtechnologies.com/]Proem Technologies[/url]