Chinaunix

标题: 怎样知道占用屏幕的用户名。 [打印本页]

作者: cfzxwxb    时间: 2014-05-13 19:57
标题: 怎样知道占用屏幕的用户名。
例如在一台主机上有多个虚拟终端在运行,其中一个终端运行程序后,转到其他终端去操作。
想让原来的运行程序运行完毕后往正在(打开的虚拟终端)打开的屏幕上显示字符:程序运行完成!
怎么实现?
作者: r2007    时间: 2014-05-13 20:20
wall?
作者: cfzxwxb    时间: 2014-05-13 20:21
2楼的,程序不知道终端名啊!
作者: cfzxwxb    时间: 2014-05-13 20:22
我只想往正在操作的终端屏幕上写字符,其他终端不想显示这些字符
作者: cfzxwxb    时间: 2014-05-13 20:31
informix    tty7         2014-05-04 06:22 (:0)
informix    pts/0        2014-05-04 06:22 (:0.0)
informix    pts/1        2014-05-04 06:23 (:0.0)
informix    pts/2        2014-05-04 06:23 (:0.0)
假设这4个虚拟终端在运行,其中pts/1终端运行的一个程序,需要好长时间!
我转到pts/2终端操作,当pts/1终端的程序运行完毕后,向pts/2终端(正在操作,打开的终端)发送字符:“程序运行完成!”
这个怎么实现?
作者: r2007    时间: 2014-05-13 20:57
偷偷告诉你,不要刷牙,带只狗,在pts/2终端面前摆出略做沉思状,不要太久,然后大声说到“芝麻开门”。
作者: cfzxwxb    时间: 2014-05-13 21:01
6楼的大侠,见笑了!小可真的不知道如何办啊!
作者: r2007    时间: 2014-05-13 21:27
回复 7# cfzxwxb
好像没印象有这么个命令能判断某个终端面前是否有个程序猿在发呆。最接近的判断就是最后一个有输入的终端就是你正在用的终端。

   
作者: cfzxwxb    时间: 2014-05-13 21:42
8楼老大,如果你说的对,我就结贴了,看来只能使用wall向所有终端发字符了!

作者: seesea2517    时间: 2014-05-14 09:45
cfzxwxb 发表于 2014-05-13 19:57
例如在一台主机上有多个虚拟终端在运行,其中一个终端运行程序后,转到其他终端去操作。
想让原来的运行程 ...


知道终端号就可以了,不需要去管他用户名,你直接 echo "xxx" > /dev/ttyxxx 就可以向那个终端输出了。
作者: rulebook    时间: 2014-05-14 14:11
回复 10# seesea2517


    学习了,高手啊
作者: cfzxwxb    时间: 2014-05-14 15:42
10楼的大侠,我现在要求的就是终端号啊!不知道当前正在使用的终端号是什么?就不知道往哪个终端号发字符啊!
作者: cfzxwxb    时间: 2014-05-21 22:09
呼唤10楼老大,怎样知道终端号?我所谓的用户名其实就是想知道终端号
作者: tgwz88    时间: 2014-05-22 00:19
ps aux | grep aux
作者: bikkuri    时间: 2014-05-22 02:45
本帖最后由 bikkuri 于 2014-05-22 02:58 编辑

用w|grep $(whoami)命令看第五列的IDLE时间。
IDLE时间最小的一般就是最后使用屏幕的用户。
但是如果你要编程序来实现的话,有点麻烦的是IDLE时间的格式不是固定的。
比如:
  1. [root@hp8 ~]# w
  2. 02:44:22 up 10 days, 13:04,  2 users,  load average: 0.61, 0.31, 0.25
  3. USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
  4. root     pts/0    test111.chn.alca Tue14    1:47   0.08s  0.08s -bash
  5. root     pts/1    135.244.46.72    02:38    0.00s  0.01s  0.00s w

  6. [root@hp8 ~]# w
  7. 02:52:08 up 10 days, 13:12,  2 users,  load average: 0.29, 0.29, 0.26
  8. USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
  9. root     pts/0    test111.chn.alca Tue14   23.00s  0.08s  0.08s -bash
  10. root     pts/1    135.244.46.72    02:38    0.00s  0.02s  0.00s w
复制代码

作者: cfzxwxb    时间: 2014-05-23 21:00
15楼的老大还是很高啊!
在下崇拜之至!
现发上自己的试验脚本:

sleep 8;    #等待8秒,转到其他终端等待这个脚本发送kkkkkkkkkkkkkkk字符串
zdm=`w -h|awk '{print $5,$2}'|tr " " "@"|sort|head -1|awk -F"@" '{print $2}'`   #用w命令判断最近操作的终端名
echo "kkkkkkkkkkkkkkK" >/dev/"$zdm"                  #发送字符到终端名


问题:转到其他终端,必须做任意一个命令操作,如果只是等待,计算机判断最后“操作”的终端名还是原来的终端名。
哪位老大还有更好的方法?不过现在好像也能实现我想要的功能啦!!哈哈,感谢15楼老大!!
作者: bikkuri    时间: 2014-05-24 12:33
本帖最后由 bikkuri 于 2014-05-24 12:39 编辑

你光用一个sort来判断最小IDLE值未必靠谱吧?
  1. 1:17m@pts/8
  2. 1:23m@pts/7
  3. 1:37m@pts/4
  4. 1:53@pts/6
  5. 1:59m@pts/2
  6. 2.00s@pts/1
  7. 2:48@pts/12
  8. 29:35@pts/5
  9. 34:20@pts/3
  10. 5:59@pts/9
  11. 8:00@pts/11
复制代码
我觉得靠谱的办法是把IDLE值全部折算成秒,然后再依次比较大小,不能用sort,因为sort只是按字符顺序排序,而不是按数值大小排序。

另外,一般既然你转到别的窗口,总会做点什么,不一定要执行命令,只要按一个键或者动一下鼠标,IDLE就被清零了。
一般你不会碰到你转到别的窗口了,原窗口的IDLE值还更小的情况。
如果你碰到了,发个截屏上来看看。

回复 16# cfzxwxb


   
作者: Shell_HAT    时间: 2014-05-24 21:39
回复 17# bikkuri


    可以试试sort -n
作者: cfzxwxb    时间: 2014-05-24 21:56
17楼,大侠也!高,实在是高!
作者: cfzxwxb    时间: 2014-06-11 18:51
现在问题又来啦:
我安装的是虚拟机。
怎样让程序强制写屏?
就是说不管在window下,或者在linux下,只要任何一个屏幕在客户的眼前,都要强制的显示出来!
就像新浪围棋一样!不管在什么状态!也不管在什么系统里,都强制的往用户的屏幕上发信息。
作者: MeRcy_PM    时间: 2014-06-17 09:43
linux Wall?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2