vine-users ML アーカイブ



[vine-users:061622] Re: DISPLAY 環境変数について

  • From: Tsuyoshi KAWABE <kawabe@xxxxxxxxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:061622] Re: DISPLAY 環境変数について
  • Date: Thu, 31 Jul 2003 09:49:12 +0900
かわべです.

At Wed, 30 Jul 2003 22:57:42 +0900 (JST),
Miya <miyam@xxxxxxxxxxxxxxxxx> wrote:

| > > $ echo $DISPLAY
| > > miyaBox.miya.org:0.0
| > > ホスト名が設定されています。
| > > 試しに別のユーザーでも DISPLAY 環境変数の内容を確認しましたがホスト名
| > > が設定されています。
| > 
| > これは、miyaBox.miya.org(ノート PC) で X を立ち上げて、そこから
| > telnet でサーバに login しているのでしょうか?
| > そうであれば、正常かと。なぜなら、X サーバは、ノート PC のもの
| > ですから。
| 
| 正常なことは正常なのですね。
| 
| 頭がこんがらがってます。。。
| DISPLYA 環境変数は X サーバー側のものなのですかね・・・

おおさとさんの質問の telnet でサーバに login したかしていな
いのかどちらでしょうか?

| > では実習問題:
| >   表示されている DISPLAY 環境変数は誰のものでしょう。
| >   ノートPC で、X を使わずにコンソールから telnet して、
| >   echo $DISPLAY したら何かが変わるでしょうか?
| 
| 試してみました。
| DISPLAY 環境変数の中身は空っぽでした。
| 仕組がいまいち理解できていません。
| もしよろしかったら、分かりやすい情報の在処など教えてもらえますと助かり
| ます。

もし,telnet でサーバに login したのであれば,
% man telnet 
environ 辺りを読むといいかも

実際確かめるなら.
------------------------------------
% telnet 
telnet> environ list
......
* DISPLAY              hoge:0.0
....
------------------------------------
となっていると思います.

今 IPv6 の USAGI Project のソースしかないので Vine ではどう
か確信ないのですが,netkit の telnet/environ.cc にこう書いて
います.
---------------------------------------------------------
/*
 * Special case for DISPLAY variable.  If it is ":0.0" or
 * "unix:0.0", we have to get rid of "unix" and insert our
 * hostname.
 */
static void env_fix_display(void) {
    enviro *ep = env_find("DISPLAY");
    if (!ep) return;
    ep->setexport(1);

    if (strncmp(ep->getval(), ":", 1) && strncmp(ep->getval(), "unix:", 5)) {
        return;
    }
    char hbuf[256];
    const char *cp2 = strrchr(ep->getval(), ':');
    int maxlen = sizeof(hbuf)-strlen(cp2)-1;
    gethostname(hbuf, maxlen);
    hbuf[maxlen] = 0;  /* ensure null termination */

    /*
     * dholland 7/30/96 if not a FQDN ask DNS
     */
    if (!strchr(hbuf, '.')) {
        struct hostent *h = gethostbyname(hbuf);
        if (h) {
            strncpy(hbuf, h->h_name, maxlen);
            hbuf[maxlen] = 0; /* ensure null termination */
        }
    }

    strcat(hbuf, cp2);

    ep->define("DISPLAY", hbuf);
}
----------------------------------------------------
--
KAWABE, Tsuyoshi