2016年03月16日

ログイン画面にVNCで接続する方法

  • Debianサーバーを立てると、windowsクライアントからリモートで、かつGUIで設定したくなりますよね。
  • わたしは VNC を使っています、これには大きく二つの方法があります。
    • systemd や inetd や xinetd により、5900番台のポートアクセスから vncserver により仮想のディスプレイを起動する方法
    • x11vnc により、実ディスプレイをリモートで共有する方法
  • 前者は管理者権限に制限があるみたいなので、わたしは後者を使っています。
  • /!\ 予備知識:VNCクライアントからディスプレイ番号n番に接続しに行くと、VNCホストの(5900+n)番のポートにアクセスする事になります。

x11vnc を使う場合

  • (!) 以下は、ディスプレイ番号0に接続する場合の設定です。(クライアントから、xxxxx:0 宛てにアクセスする)

systemd と lightdm の組み合わせの場合(成功)

  • Debian jessie では、systemd が使われているので設定を変える必要がありました。[1]


  1. x11vncサーバーに接続するためのパスワードファイルを生成 (ここでは例として、/etc/x11vnc.passwdとしています)
    $ sudo x11vnc –storepasswd /etc/x11vnc.passwd
    • パスワードファイルを作るだけなのに X-window をつかみに行くことがありますので、その時はX上のターミナルで実行する必要があります。(謎)
  2. /lib/systemd/system/x11vnc.service を新規に作成する。
    [Unit]
    Description=Start x11vnc at startup.
    After=multi-user.target

    [Service]
    Type=simple
    ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.passwd -rfbport 5900 -shared

    [Install]
    WantedBy=multi-user.target
  3. 設定ファイルを読み込ませる。
    $ sudo systemctl daemon-reload
  4. サービスを有効にする。
    $ sudo systemctl enable x11vnc.service

gdm3を使う場合(成功)

  • gdm3では、ディスプレイ番号に基づいてシェルスクリプトを起動するメカニズムがあるのでこれを利用します。

サーバー側設定

  1. /etc/gdm3/daemon.conf に以下のエントリーを追記
    [xdmcp]
    Enable=true
  2. パスワードを格納するファイルを新規作成。(ここでは例として、/etc/vnc.passwd というファイル名で作成)
    $ sudo x11vnc –storepasswd /etc/x11vnc.passwd
    • パスワードファイルを作るだけなのに X-window をつかみに行きますので、X上のターミナルで実行する必要があります。(謎)
  3. /etc/gdm3/Init/:0 というシェルスクリプトファイルを新規作成。
    #!/bin/sh/etc/gdm3/Init/Defaultx11vnc -display :0  -rfbauth /etc/vnc.passwd -forever -auth guess -shared -repeat &exit 0

systemd と vnc4server を使う場合(成功)

参考

/lib/systemd/system/xvnc.socket を新規に作成する

  • ディスプレイ番号50の場合
    [Unit]
    Description=XVNC Server

    [Socket]
    ListenStream=5950
    Accept=yes

    [Install]
    WantedBy=sockets.target

/lib/systemd/system/xvnc@.service を新規に作成する

  • [Unit]
    Description=XVNC Per-Connection Daemon

    [Service]
    ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1270x930 -depth 24 -once -SecurityTypes=None
    User=nobody
    StandardInput=socket
    StandardError=syslog

設定ファイルを読み込ませる

  • $ sudo systemctl daemon-reload

サービスを有効にする

  • $ sudo systemctl enable xvnc.socket

ディスプレイマネジャーの xdmcp を有効にしてリスタートさせる

  • gdm3 の場合、/etc/gdm3/daemon.conf に以下のエントリーを追記
    • [xdmcp]
      Enable=true
  • lightdm の場合、/etc/lightdm/lightdm.conf に以下のエントリーを追記
    • [XDMCPServer]
      enabled=true
      port=177
       

xinetd と vnc4server を使う場合(工事中)

  • (!) 以下は、ディスプレイ番号50と51に接続する場合の設定です。(クライアントから、xxxxx:50、xxxxx:51 宛てにアクセスする)

/etc/services

  • 末尾の2行を追加

     ・
    # Local services
    xvnc 5950/tcp # VNC Server
    xvnc-wait 5951/tcp # VNC Server

/etc/xinet.d/xvnc

  • 新たに作成
    service xvnc
    {
    disable = no
    socket_type = stream
    wait = no
    user = nobody
    group = tty
    server = /usr/bin/Xvnc
    server_args = -inetd -geometry 1270x930 -depth 24 -query localhost -once securitytypes=none
    }

/etc/xinet.d/xvnc-wait

  • 新たに作成
    service xvnc-wait
    {
    disable = no
    socket_type = stream
    wait = yes
    user = uuuu
    group = tty
    server = /usr/bin/Xvnc
    server_args = -inetd -geometry 1270x930 -depth 24 -query localhost -once passwordFile=/home/uuuu/.vnc/passwd
    }
  • (!) uuuu の部分はあなたのユーザーIDに変えてください(2箇所)

  • /home/uuuu/.vnc/passwd は、以下のコマンドで作成します。
    $ vncpasswd

脚注

PrivateMoinAtUltra: MyProof/DisplayManager-VNC (last edited 2016-04-04 02:00:46 by admin)

posted by ばらち at 20:52 | TrackBack(0) | 日記
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/174504601

この記事へのトラックバック