utmp 中 screen 使用的显示

utmp 中 screen 使用的显示

桌面 Linux 中的 X 窗口系统(仅使用一个物理显示器)通常使用显示器 0、屏幕 0。Ubuntu who14.04 中的输出为

user1   :0           2016-06-15 14:25 (:0)

其中( ):0的缩写。在这里我仅从 GUI 登录。:0.0:display.screen

然后我打开一个终端模拟器;我运行screen并创建了两个不同的窗口(每个窗口都只包含bash)。的结果输出who是:

user1   :0           2016-06-15 14:25 (:0)
user1   pts/1        2016-06-15 14:26 (:0)
user1   pts/11       2016-06-15 16:31 (:0:S.0)
user1   pts/11       2016-06-15 16:31 (:0:S.1)

为什么使用这个语法?好像是:display:display.screen。是否screen在物理显示器内模拟另一个显示器?

答案1

您指的是该行末尾的文本。它被写入以screen指示它正在使用哪个伪终端连接,以及screen为其分配了哪个窗口号。 评论代码中指出它的作用:

/* 
 * Construct a utmp entry for window wi. 
 * the hostname field reflects what we know about the user (display) 
 * location. If d_loginhost is not set, then he is local and we write 
 * down the name of his terminal line; else he is remote and we keep 
 * the hostname here. The letter S and the window id will be appended. 
 * A saved utmp entry in wi->w_savut serves as a template, usually. 
 */

然后

      /* 
       * we want to set our ut_host field to something like 
       * ":ttyhf:s.0" or 
       * "faui45:s.0" or 
       * "132.199.81.4:s.0" (even this may hurt..), but not 
       * "faui45.informati"......:s.0 
       * HPUX uses host:0.0, so chop at "." and ":" (Eric Backus) 
       */

最后给出您可能认识的实际代码:

    sprintf(主机 + strlen(主机), ":S.%d", win->w_number);

    strncpy(u.ut_host, 主机, sizeof(u.ut_host));

它将字符串存储在ut_hostutmp/utmpx 结构的成员中。

进一步阅读:

相关内容