「TigerVNC」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→ヒントとテクニック: 翻訳) |
|||
(3人の利用者による、間の31版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:セキュリティ]] |
||
[[Category:リモートデスクトップ]] |
[[Category:リモートデスクトップ]] |
||
+ | [[Category:サーバー]] |
||
[[de:VNC]] |
[[de:VNC]] |
||
− | [[en: |
+ | [[en:TigerVNC]] |
− | [[es: |
+ | [[es:TigerVNC]] |
+ | [[ru:Vncserver]] |
||
+ | [[zh-hans:Virtual Network Computing]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|x11vnc}} |
{{Related|x11vnc}} |
||
+ | {{Related|TurboVNC}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
+ | [http://tigervnc.org/ TigerVNC] は [[Wikipedia:Virtual Network Computing|Virtual Network Computing]] (VNC) プロトコルの実装です。この記事ではサーバー機能に焦点をあてています。 |
||
− | Vncserver は以下のような複数のリモート機能をユーザーが使えるようにするリモートディスプレイデーモンです: |
||
+ | |||
− | # ローカルの X セッション (物理モニターで動作している X) の直接制御。 |
||
− | # マシンの (物理モニターではなく仮想的に) バッググラウンドで動作する''並列'' X セッション。ユーザーが切断しても、サーバーのアプリケーションは全て実行し続けることができます。 |
||
== インストール == |
== インストール == |
||
− | + | {{Pkg|tigervnc}} パッケージを[[インストール]]してください。 |
|
+ | {{Note|パッケージには vncserver, x0vncserver, vncviewer が含まれています。}} |
||
+ | Vncserver には2つのリモート制御機能が存在します: |
||
− | == Vncserver を実行する == |
||
+ | # 標準的な X サーバーと同じような仮想 (ヘッドレス) サーバー。物理的な画面ではなく仮想スクリーンを使用する。仮想サーバーは物理的な X サーバーと並行して動作します。 |
||
+ | # 物理モニターを使用しているローカルの X セッションの直接制御。 |
||
+ | == vncserver をバーチャル(ヘッドレス)セッションで起動する == |
||
− | === 初期設定 === |
||
+ | === 初回セットアップ === |
||
− | ==== environment と password ファイルを作成する ==== |
||
+ | {{Note|Linux システムでは物理メモリが許すかぎりいくらでも VNC サーバーを使うことができます。それぞれは互いに並行して動きます。}} |
||
− | Vncserver は最初に起動した時に初期の environment ファイルとユーザーの password ファイルを作成します: |
||
− | {{hc|$ vncserver| |
||
− | You will require a password to access your desktops. |
||
+ | クイックスタートについては、以下のステップを参照してください。 設定オプションの完全なリストについては {{man|8|vncserver}} を読むことをお勧めします。 |
||
− | Password: |
||
− | Verify: |
||
+ | # {{ic|vncpasswd}} を使用してパスワードを作成して、ハッシュ化したパスワードを {{ic|~/.vnc/passwd}} に保存します。 |
||
− | New 'mars:1 (facade)' desktop is mars:1 |
||
+ | # {{ic|/etc/tigervnc/vncserver.users}} を編集して、ユーザマッピングを定義します。このファイルで定義された各ユーザは、そのセッションが実行される対応するポートを持っています。ファイル内の数字は、TCP ポートに対応します。デフォルトでは、:1 が TCP ポート 5901 (5900+1) になっています。別の並列サーバが必要な場合、2 番目のインスタンスは次に高い空きポート、つまり 5902 (5900+2) で実行することができます。 |
||
+ | # {{ic|~/.vnc/config}} を作成し、最低限 {{ic|1=session=foo}} のような行で、実行する[[デスクトップ環境]]を foo に対応させたセッションの種類を定義してください。どのデスクトップ環境がシステムで利用できるかは、{{ic|/usr/share/xsessions/}} 内の ''.desktop'' ファイルで確認できます。例えば: |
||
+ | {{hc|~/.vnc/config|2= |
||
− | Creating default startup script /home/facade/.vnc/xstartup |
||
+ | session=lxqt |
||
− | Starting applications specified in /home/facade/.vnc/xstartup |
||
+ | geometry=1920x1080 |
||
− | Log file is /home/facade/.vnc/mars:1.log |
||
+ | localhost |
||
+ | alwaysshared |
||
}} |
}} |
||
+ | {{Note|前のステップを完全に動作させるには、追加のセキュリティ設定が必要です。設定を完了するには、[[#SSHトンネル経由での vncserver へのアクセス]]を参照してください。テスト目的では、この手順を省略して localhost 以外からの安全でない接続を許可します。}} |
||
− | vncserver が動作するデフォルトのポートは :1 で、サーバーが動作する TCP ポートと対応しています (5900+n = ポート番号)。この場合、5900+1=5901 で動作します。二度 vncserver を動作させると次の数字でフリーのポート (:2 または 5902) に二番目のインスタンスが作成されます。 |
||
+ | === tigervnc の開始と終了 === |
||
− | {{Note|Linux システムでは物理メモリが許すかぎりいくらでも VNC サーバーを使うことができます -- それぞれは互いに並行して動きます。}} |
||
+ | {{ic|vncserver@.service}} テンプレートのインスタンスを [[起動]] します。オプションで起動時やシャットダウン時に動くよう[[有効化]]します。この場合の''インスタンス識別子''はディスプレイ番号であることに注意してください(例:ディスプレイ番号 {{ic|:1}} のインスタンス {{ic|vncserver@:1.service}} など)。 |
||
− | vncserver を終了するには -kill スイッチを使います: |
||
− | $ vncserver -kill :1 |
||
+ | {{Note|{{ic|/usr/bin/vncserver}} への直接の呼び出しは、適切なセッションスコープを確立しないため、サポートされていません。''systemd'' サービスは TigerVNC を使うために唯一サポートされている方法です。[https://github.com/TigerVNC/tigervnc/issues/1096 Issue #1096] を参照してください。}} |
||
− | ==== xstartup ファイルを編集する ==== |
||
+ | == ローカルディスプレイを直接公開する == |
||
− | Vncserver は [[xinitrc|.xinitrc]] ファイルのように機能する {{ic|~/.vnc/xstartup}} を読み込みます。グラフィカル環境を使いたい場合は、少なくとも起動する DE を定義する必要があります。例えば、xfce4 を起動するには: |
||
+ | Tigervnc は {{ic|libvnc.so}} を同梱しており、これは X の初期化中に直接ロードすることができます。これにより、パフォーマンスが向上します。 |
||
− | #!/bin/sh |
||
+ | 以下のファイルを作成し、X を再起動してください: |
||
− | export XKL_XMODMAP_DISABLE=1 |
||
− | exec startxfce4 |
||
+ | {{hc|/etc/X11/xorg.conf.d/10-vnc.conf| |
||
− | {{Note|{{ic|XKL_XMODMAP_DISABLE}} 行は仮想化された DE のターミナルで入力するときにキーストロークが組み替えられる問題を解決します。}} |
||
+ | Section "Module" |
||
+ | Load "vnc" |
||
+ | EndSection |
||
+ | Section "Screen" |
||
− | ==== パーミッション ==== |
||
+ | Identifier "Screen0" |
||
+ | Option "UserPasswdVerifier" "VncAuth" |
||
+ | Option "PasswordFile" "/root/.vnc/passwd" |
||
+ | EndSection |
||
+ | }} |
||
+ | == x0vncserver を直接実行してローカルディスプレイを制御する == |
||
− | これは必須ではありませんが、{{ic|~/.ssh}} と同じように {{ic|~/.vnc}} を保護すると良いでしょう。保護するには次を実行してください: |
||
− | $ chmod 700 ~/.vnc |
||
+ | {{Pkg|tigervnc}} はまた、{{man|1|x0vncserver}} も提供しており、これによって物理的な X セッションを直接制御することができます。''vncpasswd'' ツールを使ってセッションパスワードを定義した後、以下のようにサーバーを起動します: |
||
− | === サーバーを起動する === |
||
+ | $ x0vncserver -rfbauth ~/.vnc/passwd |
||
− | Vncserver はスイッチを使って柔軟に使うことができます。下の例では、特定の解像度で、複数のユーザーが同時に表示・操作可能に、そして仮想サーバの dpi を 96 に設定して vncserver を起動します: |
||
− | |||
− | $ vncserver -geometry 1440x900 -alwaysshared -dpi 96 :1 |
||
− | {{Note|vncserver で標準的なモニター解像度を使う必要はありません; 1440x900 は 1429x882 や 1900x200 など普段使われない数字に置き換えることができます。}} |
||
+ | {{Note| |
||
− | オプションの完全な一覧を見るには、-help スイッチを vncserver に渡して下さい。 |
||
+ | * [[x11vnc]] は、現在の X セッションを直接制御できる代替の VNC サーバーでもあります。 |
||
+ | * {{ic|x0vncserver}} は現在、クライアントとサーバー間のクリップボード共有をサポートしていません({{ic|autocutsel}} の助けを借りても)。参照:[https://github.com/TigerVNC/tigervnc/issues/529 Issue #529]。 |
||
+ | }} |
||
+ | === xprofile とともに === |
||
− | $ vncserver -help |
||
+ | ''x0vncserver'' を簡単に起動する方法の一つは、[[xprofile]] ファイルの一つに以下のような行を追加することです: |
||
− | == 物理ディスプレイで vncserver を実行する (5900 ポート) == |
||
+ | {{hc|~/.xprofile| |
||
− | === TigerVNC の x0vncserver を使う (推奨) === |
||
+ | ... |
||
− | TigerVNC には x11vnc と同じような機能をもった x0vncserver バイナリが入っている、例: |
||
− | + | x0vncserver -rfbauth ~/.vnc/passwd & |
|
+ | }} |
||
+ | === systemd とともに === |
||
− | 詳しくは: |
||
− | man x0vncserver |
||
+ | ==== システムサービスとして ==== |
||
− | === x11vnc を使う (推奨)=== |
||
− | 物理ディスプレイのリモートコントロールがしたい場合は {{pkg|x11vnc}} パッケージを使って下さい。詳しくは、[[X11vnc|X11vnc]] を見て下さい。 |
||
+ | このオプションは、ユーザーが現在のディスプレイ、およびディスプレイマネージャーが提供するログイン画面にアクセスできるようにします。 |
||
− | === ダーティハックを使う (非推奨) === |
||
+ | このサービスは、ユーザーがセッションからログオフするたびに自動的に再起動されます。 |
||
− | ==== 基本設定 ==== |
||
+ | 以下の例では [[LightDM]] が使用されていますが、{{ic|XAUTHORITY}} 変数を修正することで他のディスプレイマネージャーに適応させることが可能です。 |
||
− | xorg-server と tigervnc をインストールして Xorg 設定で "vnc" をロードしてください。 |
||
+ | {{hc|/etc/systemd/system/x0vncserver.service|2= |
||
− | 例 |
||
+ | [Unit] |
||
− | {{ic|/etc/X11/xorg.conf.d/10-vnc.conf}}: |
||
+ | Description=Remote desktop service (VNC) for :0 display |
||
+ | Requires=display-manager.service |
||
+ | After=network-online.target |
||
+ | After=display-manager.service |
||
+ | [Service] |
||
− | Section "Module" |
||
+ | Type=simple |
||
− | Load "vnc" |
||
+ | Environment=HOME=/root |
||
− | EndSection |
||
+ | Environment=XAUTHORITY=/var/run/lightdm/root/:0 |
||
− | |||
+ | ExecStart=x0vncserver -display :0 -rfbauth ~/.vnc/passwd |
||
− | Section "Screen" |
||
+ | Restart=on-failure |
||
− | Identifier "Screen0" |
||
+ | RestartSec=500ms |
||
− | Option "SecurityTypes" "None" |
||
− | EndSection |
||
+ | [Install] |
||
− | パスワード認証をするには、vncpasswd コマンドを実行した後に、下のように "Screen" セクションを置き換えて下さい。 |
||
+ | WantedBy=multi-user.target |
||
+ | }} |
||
+ | このサービスはシステムユニットなので、{{ic|-rfbauth ~/.vnc/passwd}} は {{ic|/root/.vnc/passwd}} を指します。 |
||
− | Section "Screen" |
||
− | Identifier "Screen0" |
||
− | Option "SecurityTypes" "VncAuth" |
||
− | Option "UserPasswdVerifier" "VncAuth" |
||
− | Option "PasswordFile" "/root/.vnc/passwd" |
||
− | EndSection |
||
+ | {{ic|x0vncserver.service}} を[[開始/有効化]]してください。 |
||
− | ==== xorg-server にパッチをあてる ==== |
||
+ | ==== ユーザーサービスとして ==== |
||
− | 残念ながら xorg-server パッケージにはバグが存在します (15/11/2013)。 |
||
− | ありがたいことに fedora がこのパッチを作成しています。 |
||
+ | 現在のデスクトップにリモートアクセスをすぐに設定できる最も簡単な方法として、''x0vncserver'' を実行する VNC サーバーを持つために、以下のように ''systemd'' ユニットを作成して、必要なユーザーとオプションで置き換えてください: |
||
− | [http://pkgs.fedoraproject.org/cgit/xorg-x11-server.git/plain/0001-include-export-key_is_down-and-friends.patch?h=f19&id=06e94667faa0cd1f9f32cf54e9e447ef50fde635 |
||
− | ] |
||
+ | {{hc|~/.config/systemd/user/x0vncserver.service|2= |
||
− | abs コマンドを実行して、パッチファイルを配置して PKGBUILD を編集してください。 |
||
+ | [Unit] |
||
+ | Description=Remote desktop service (VNC) |
||
+ | [Service] |
||
− | PKGBUILD サンプル: |
||
+ | Type=simple |
||
− | source = vnc.patch |
||
+ | ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done' |
||
− | sha256sums = '1bbbe70236dc70b5e35572f2197d163637100f8c58d0038bdc240df075eb5726' |
||
+ | ExecStart=/usr/bin/x0vncserver -rfbauth %h/.vnc/passwd |
||
− | prepare() { |
||
− | cd "${pkgbase}-${pkgver}" |
||
− | # patch for vnc module |
||
− | patch -Np1 -i ../vnc.patch |
||
+ | [Install] |
||
− | '''パッチ (リンクが死んでいる場合)''' |
||
+ | WantedBy=default.target |
||
− | +++ b/include/input.h |
||
+ | }} |
||
− | @@ -244,12 +244,12 @@ typedef struct _InputAttributes { |
||
+ | |||
− | #define KEY_POSTED 2 |
||
+ | {{ic|ExecStartPre}} 行は、{{ic|${USER}<nowiki/>}} によって Xorg が開始されるのを待っています。 |
||
− | #define BUTTON_POSTED 2 |
||
+ | |||
− | |||
+ | ユーザーネームとパスワードでログインする場合は、{{ic|ExecStart}} を {{ic|1=/usr/bin/x0vncserver -PAMService=login -PlainUsers=${USER} -SecurityTypes=TLSPlain}} に置き換えてください。 |
||
− | -extern void set_key_down(DeviceIntPtr |
||
+ | |||
− | diff --git a/include/input.h b/include/input.h |
||
+ | {{ic|x0vncserver.service}} ユーザーユニットを[[開始/有効化]]してください。 |
||
− | index 350daba..2d5e531 100644 |
||
+ | |||
− | --- a/include/input.h |
||
+ | == XDMCP と組み合わせて Xvnc をオンデマンドセッションで実行する == |
||
− | +++ b/include/input.h |
||
+ | |||
− | @@ -244,12 +244,12 @@ typedef struct _InputAttributes { |
||
+ | ''systemd'' のソケットアクティベーションと [[XDMCP]] を組み合わせることで、ログインしようとする各ユーザーごとに自動的に VNC サーバーを生成することができます。そのため、ユーザーごとにサーバー/ポートを設定する必要はありません。このセットアップでは、ディスプレイマネージャーを使用してユーザーを認証し、ログインするため、VNC パスワードは必要ありません。欠点としては、ユーザーがサーバー上でセッションを継続して後で再接続することはできません。 |
||
− | #define KEY_POSTED 2 |
||
+ | |||
− | #define BUTTON_POSTED 2 |
||
+ | これを動作させるには、まず [[XDMCP]] を設定し、ディスプレイマネージャーが動作していることを確認してください。 |
||
− | |||
+ | 次に、以下を作成します: |
||
− | -extern void set_key_down(DeviceIntPtr pDev, int key_code, int type); |
||
+ | |||
− | -extern void set_key_up(DeviceIntPtr pDev, int key_code, int type); |
||
+ | {{hc|/etc/systemd/system/xvnc.socket|2= |
||
− | -extern int key_is_down(DeviceIntPtr pDev, int key_code, int type); |
||
+ | [Unit] |
||
− | -extern void set_button_down(DeviceIntPtr pDev, int button, int type); |
||
+ | Description=XVNC Server |
||
− | -extern void set_button_up(DeviceIntPtr pDev, int button, int type); |
||
+ | |||
− | -extern int button_is_down(DeviceIntPtr pDev, int button, int type); |
||
+ | [Socket] |
||
− | +extern _X_EXPORT void set_key_down(DeviceIntPtr pDev, int key_code, int type); |
||
+ | ListenStream=5900 |
||
− | +extern _X_EXPORT void set_key_up(DeviceIntPtr pDev, int key_code, int type); |
||
+ | Accept=yes |
||
− | +extern _X_EXPORT int key_is_down(DeviceIntPtr pDev, int key_code, int type); |
||
+ | |||
− | +extern _X_EXPORT void set_button_down(DeviceIntPtr pDev, int button, int type); |
||
+ | [Install] |
||
− | +extern _X_EXPORT void set_button_up(DeviceIntPtr pDev, int button, int type); |
||
+ | WantedBy=sockets.target |
||
− | +extern _X_EXPORT int button_is_down(DeviceIntPtr pDev, int button, int type); |
||
+ | }} |
||
− | |||
+ | |||
− | extern void InitCoreDevices(void); |
||
+ | {{hc|/etc/systemd/system/xvnc@.service|2= |
||
− | extern void InitXTestDevices(void); |
||
+ | [Unit] |
||
+ | Description=XVNC Per-Connection Daemon |
||
+ | |||
+ | [Service] |
||
+ | ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1080 -once -SecurityTypes=None |
||
+ | User=nobody |
||
+ | StandardInput=socket |
||
+ | StandardError=syslog |
||
+ | }} |
||
+ | |||
+ | {{ic|xvnc.socket}} を[[開始/有効化]]してください。これで、任意の数のユーザーがポート 5900 に接続することで独自のデスクトップを取得できます。 |
||
+ | |||
+ | VNC サーバーがインターネットに公開されている場合は、{{ic|xvnc@.service}} の {{ic|Xvnc}} に {{ic|-localhost}} オプションを追加してください({{ic|-query localhost}} と {{ic|-localhost}} は異なるスイッチです)、[[#Accessing vncserver via SSH tunnels]] に従ってください。接続後にユーザーを選択するだけなので、VNC サーバーはユーザー ''nobody'' として実行され、{{ic|vncserver}} スクリプトの代わりに直接 {{ic|Xvnc}} を使用するため、{{ic|~/.vnc}} のオプションは無視されます。オプションで、クリップボードが動作するように ''vncconfig'' を [[自動起動]]させてください(''vncconfig'' は非 VNC セッションで即座に終了します)。作成する一つの方法は: |
||
+ | |||
+ | {{hc|/etc/X11/xinit/xinitrc.d/99-vncconfig.sh| |
||
+ | #!/bin/sh |
||
+ | vncconfig -nowin & |
||
+ | }} |
||
== vncserver に接続する == |
== vncserver に接続する == |
||
+ | {{Warning|LAN の外でセキュアな対策を取ることなく vncserver に接続することは推奨されません。LAN の外側で接続する必要がある場合は下の説明を読むことを推奨します。SecurityTypes をセキュアでないオプションに設定しないかぎり TigerVNC はデフォルトで暗号化されますが、通信相手の確認はしないため接続時の MITM 攻撃を防ぐことはできません。セキュアな接続をするときは X509Vnc を使うことを推奨します。}} |
||
− | vncserver に接続できるクライアントは多数存在します。下は 10.1.10.2 のポート 5901 (:1) で動作している vncserver |
+ | vncserver に接続できるクライアントは多数存在します。下は 10.1.10.2 のポート 5901 (:1) で動作している vncserver に接続するコマンド例です: |
$ vncviewer 10.1.10.2:1 |
$ vncviewer 10.1.10.2:1 |
||
169行目: | 195行目: | ||
* {{Pkg|gtk-vnc}} |
* {{Pkg|gtk-vnc}} |
||
− | * {{Pkg| |
+ | * {{Pkg|krdc}} |
* {{Pkg|rdesktop}} |
* {{Pkg|rdesktop}} |
||
* {{Pkg|vinagre}} |
* {{Pkg|vinagre}} |
||
* {{Pkg|remmina}} |
* {{Pkg|remmina}} |
||
− | * {{ |
+ | * {{AUR|vncviewer-jar}} |
+ | TigerVNC の vncviewer にはシンプルが GUI が存在し、何もパラメータを付けずに実行します: |
||
− | == SSH トンネルで VNC サーバーをセキュアにする == |
||
+ | $ vncviewer |
||
+ | |||
+ | == SSH トンネル経由で vncserver にアクセス == |
||
+ | SSH 接続を提供するサーバの利点は、VNC トラフィックが SSH ポートを介してトンネリングされるため、既に開いている SSH ポート以外のポートを外部に開く必要がないことです。 |
||
=== サーバー側 === |
=== サーバー側 === |
||
+ | サーバ側では、''vncserver'' または、 ''x0vncserver'' を実行する必要があります。 |
||
− | LAN の保護の外から vncserver にアクセスしたいときは平文パスワードやビューア・サーバの暗号化されないトラフィックに配慮する必要があります。Vncserver は ssh トンネリングによって簡単にセキュアにすることができます。さらに、この方法を使えば外側に他のポートを開く必要はありません。トラフィックは文字通りユーザーが既に WAN のために開いている SSH ポートを通過するからです。この場合 vncserver を使用する際は -localhost スイッチを使うことが強く推奨されます。このスイッチは''ローカルホストからの''接続だけを許可します -- さらに類推によって物理的に ssh を使ってマシンの認証を受けたユーザーも許可されます。 |
||
+ | これらのどちらかを実行する場合、{{ic|~/.vnc/config}} の {{ic|localhost}} オプション、または {{ic|-localhost}} スイッチ(''x0vncserver'' の場合)を使用することをお勧めします。例えば |
||
− | $ vncserver -geometry 1440x900 -alwaysshared -dpi 96 -localhost :1 |
||
+ | |||
+ | {{hc|~/.vnc/config|2= |
||
+ | session=lxqt |
||
+ | geometry=1920x1080 |
||
+ | localhost |
||
+ | alwaysshared |
||
+ | }} |
||
+ | |||
+ | 例えば、{{ic|vncserver@.service}} を[[開始]]または[[再起動]]してください([[#初回セットアップ]]も参照してください)。 |
||
=== クライアント側 === |
=== クライアント側 === |
||
187行目: | 226行目: | ||
サーバーはローカルホストからの接続だけを許可しているので、-L スイッチを使ってトンネルを有効にして ssh で接続します。例えば: |
サーバーはローカルホストからの接続だけを許可しているので、-L スイッチを使ってトンネルを有効にして ssh で接続します。例えば: |
||
− | $ ssh |
+ | $ ssh 10.1.10.2 -L 5901:localhost:5901 |
+ | |||
+ | 上記はサーバーのポート 5901 をクライアントのポート 5901 に転送します。サーバーとクライアントでポート番号を必ずしも一致させる必要はありません。例: |
||
+ | |||
+ | $ ssh 10.1.10.2 -L 8900:localhost:5901 |
||
+ | 上記のコマンドはサーバーのポート 5901 をクライアントマシンのポート 8900 に転送します。 |
||
− | これはサーバーポート 5901 をクライアントのポート 8900 に転送します。SSH で接続されると、xterm やシェルウィンドウが開いたままになります; これはサーバーのセキュア化されたトンネルとして働きます。vnc で接続するには、新しく xterm を開いてリモートの IP アドレスではな、セキュア化されたトンネルを使ってクライアントのローカルホストに接続します: |
||
− | $ vncviewer localhost::8900 |
||
+ | SSH で接続したら、サーバーと接続するための暗号化トンネルとして xterm やシェルのウィンドウは開いたままにしてください。暗号化トンネルを使って接続するには、vncviewer でローカルホストのクライアントポートを指定します。 |
||
− | ssh の man ページより [http://www.unixuser.org/~euske/doc/openssh/jman/ssh.html]: |
||
− | ''-L [bind_address:] port:host:hostport'' |
||
+ | サーバーとクライアントで同じポートを使用する場合: |
||
− | ''ポート与えられたローカル (クライアント) ホスト上のポートが、与えられたリモートホスト上のポートに転送されるよう指定します(ローカル→リモートのポート転送)。これはローカル側でポート に listen (接続受け付け) 用のソケットを割り当てることによりおこなわれます。さらにbindするアドレス が与えられている場合は、ソケットはこのアドレスに bind されます。このポートに向けておこなわれた接続はつねに安全な通信路を経由してリモートマシン上に到達し、そこからホスト のポートホスト側ポート に接続されるようになります。ポート転送は設定ファイルによっても指定できます。IPv6 アドレスは他の形式でも指定することができます:'' |
||
+ | $ vncviewer localhost:1 |
||
+ | サーバーとクライアントで違うポートを使用する場合: |
||
− | ''[bind_address/] port/host/ hostport もしくはブラケット [ ] で囲むことで指定できます。'' |
||
+ | $ vncviewer localhost:8900 |
||
− | ''特権ポートを転送できるのはスーパーユーザだけです。デフォルトでは、ローカル側のポートはGatewayPortsの設定に従って bind されますが、bindするアドレス を明示的に指定することで、特定のアドレスに接続をふり向けることができます。bindするアドレス として"localhost"を指定すると、ポートを listen するのはローカルな使用のみに限ることになります。いっぽう、空のアドレスまたは `*' を指定すると、そのポートはすべてのインターフェイスに対して使用可能になります。'' |
||
=== SSH で Android デバイスから VNC サーバーに接続する === |
=== SSH で Android デバイスから VNC サーバーに接続する === |
||
229行目: | 271行目: | ||
接続してください。 |
接続してください。 |
||
+ | == ヒントとテクニック == |
||
− | == Tips and Tricks == |
||
+ | === macOS に接続する === |
||
− | === 起動時・シャットダウン時に VNC サーバーを起動・停止する === |
||
+ | https://help.ubuntu.com/community/AppleRemoteDesktop を見てください。[[Remmina]] でテスト済みです。 |
||
− | {{ic|/usr/lib/systemd/system/vncserver.service}} のファイルを探して下さい |
||
+ | === 推奨セキュリティ設定 === |
||
− | {{hc|/etc/systemd/system/vncserver@:1.service| |
||
+ | {{Note|[[#SSH トンネル経由で vncserver にアクセス|SSH トンネル]]を使用する場合、sshd によって暗号化が行われるため X509Vnc は不要です。}} |
||
− | <nowiki># The vncserver service unit file |
||
− | # |
||
− | # 1. Copy this file to /etc/systemd/system/vncserver@:x.service |
||
− | # Note that x is the port number on which the vncserver will run. The default is 1 which |
||
− | # corresponds to port 5901. For a 2nd instance, use x=2 which corresponds to port 5902. |
||
− | # 2. Edit User= |
||
− | # ("User=foo") |
||
− | # 3. Edit and vncserver parameters appropriately |
||
− | # ("/usr/bin/vncserver %i -arg1 -arg2 -argn") |
||
− | # 4. Run `systemctl --system daemon-reload` |
||
− | # 5. Run `systemctl enable vncserver@:<display>.service` |
||
− | # |
||
− | # DO NOT RUN THIS SERVICE if your local area network is untrusted! |
||
− | # |
||
− | # See the wiki page for more on security |
||
− | # https://wiki.archlinux.org/index.php/Vncserver |
||
+ | SecurityTypes は使用するセキュリティアルゴリズムを制御します。現在のバージョン 1.5.0 でのデフォルトは "X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None" です。"X509Vnc,TLSVnc" とすることで暗号化しないデータのやりとりを無効化できます。 |
||
− | [Unit] |
||
− | Description=Remote desktop service (VNC) |
||
− | After=syslog.target network.target |
||
+ | TLSVnc では同一性確認がないため、X509Vnc を使うことを推奨します: |
||
− | [Service] |
||
− | Type=forking |
||
− | User= |
||
+ | $ vncserver -x509key /path/to/key.pem -x509cert /path/to/cerm.pem -SecurityTypes X509Vnc :1 |
||
− | # Clean any existing files in /tmp/.X11-unix environment |
||
− | ExecStartPre=-/usr/bin/vncserver -kill %i |
||
− | ExecStart=/usr/bin/vncserver %i |
||
− | ExecStop=/usr/bin/vncserver -kill %i |
||
+ | x509 証明書の作成方法はこの記事では説明しません。[[Let’s Encrypt]] を使用したり、[[OpenSSL]] を使って手動で証明書を発行してサーバーとクライアントで鍵を共有できます。 |
||
− | [Install] |
||
− | WantedBy=multi-user.target |
||
− | </nowiki>}} |
||
− | === |
+ | === フルスクリーンの切り替え === |
+ | これは VNC クライアントのメニューから行うことができます。デフォルトでは、VNC クライアントの mkey は {{ic|F8}} です。 |
||
− | リモートマシンからローカルマシンへのコピーが動作しない場合、サーバー上で以下のように autocutsel を起動して下さい [[https://bbs.archlinux.org/viewtopic.php?id=101243 参照]]: |
||
+ | |||
+ | === マウスの戻る/進むボタンが動作しない場合の回避策 === |
||
+ | |||
+ | 現在の VNC プロトコルは 7つのマウスボタン(左、中、右、スクロールアップ、スクロールダウン、スクロール左、スクロール右)しか使用していないため、マウスに戻るボタンと進むボタンがある場合、これらは使用できず、入力は無視されます。 |
||
+ | |||
+ | [https://www.bedroomlan.org/projects/evrouter/ evrouter] は、マウスの戻る/進むボタンをクリックしたときにキーボードのキー押下を送信してこの制限を回避するために使用できます。オプションで、{{Pkg|xautomation}} と {{Pkg|xbindkeys}} をサーバーで使用して、必要に応じてキーボードのキー押下をマウスボタンのクリックにマップバックできます。 |
||
+ | |||
+ | ==== キーボードキー XF86Back/XF86Forward でマウスの戻る/進むボタンを代用する ==== |
||
+ | |||
+ | この方法はシンプルで、例えば Web ブラウザやファイルブラウザを使用している間に戻る/進むをナビゲートする方法が必要な場合に適しています。 |
||
+ | |||
+ | クライアントで {{AUR|evrouter}} と {{Pkg|xautomation}} をインストールします。evrouter を設定します。正確なデバイス名、ウィンドウ名、ボタン名などを見つける方法とヒントについては、[[マウスボタン#evrouter]] と evrouter の man ページを参照してください。例の設定は以下の通りです: |
||
+ | |||
+ | {{hc|~/.evrouterrc| |
||
+ | Window "OtherComputer:0 - TigerVNC": # Window title used as filter |
||
+ | |||
+ | # Using Shell to avoid repeating key presses (see evrouter manual) |
||
+ | "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/275 "Shell/xte 'key XF86Back'" |
||
+ | "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/276 "Shell/xte 'key XF86Forward'" |
||
+ | |||
+ | # Use XKey below instead if repeating keys is desired (see evrouter manual) |
||
+ | #"Logitech Gaming Mouse G400" "/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse" none key/275 "XKey/XF86Back" |
||
+ | #"Logitech Gaming Mouse G400" "/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse" none key/276 "XKey/XF86Forward" |
||
+ | }} |
||
+ | |||
+ | クライアントで evrouter を起動します。上記の設定で、マウスの戻るボタンをクリックすると VNC サーバーに {{ic|XF86Back}} が送信され、進むボタンをクリックすると {{ic|XF86Forward}} が送信されます。 |
||
+ | |||
+ | ==== サーバーでキーボードキー押下をマウスボタンクリックにマップバックする ==== |
||
+ | |||
+ | 必要に応じて、サーバーでキーボードキーをマウスボタンクリックにマップバックすることが可能です。この場合、クライアントやサーバーで絶対に使用されないキーボードキーを使用することが良いでしょう。以下の例では、キーボードキー {{ic|XF86Launch8}} / {{ic|XF86Launch9}} がマウスボタン 8/9 として使用されています。 |
||
+ | |||
+ | クライアントでの evrouter 設定: |
||
+ | |||
+ | {{hc|~/.evrouterrc| |
||
+ | Window "OtherComputer:0 - TigerVNC": # ウィンドウタイトル |
||
+ | |||
+ | # キー押下を繰り返さないように Shell を使用(evrouter マニュアルを参照) |
||
+ | "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/275 "Shell/xte 'key XF86Launch8'" |
||
+ | "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/276 "Shell/xte 'key XF86Launch9'" |
||
+ | }} |
||
+ | |||
+ | サーバーで {{Pkg|xautomation}} と {{Pkg|xbindkeys}} をインストールします。xbindkeys を設定して、キーボードキー {{ic|XF86Launch8}} / {{ic|XF86Launch9}} を xte を使ってマウスボタン 8/9 にマップします。 |
||
+ | |||
+ | {{hc|~/.xbindkeysrc| |
||
+ | "xte 'mouseclick 8'" |
||
+ | XF86Launch8 |
||
+ | |||
+ | "xte 'mouseclick 9'" |
||
+ | XF86Launch9 |
||
+ | }} |
||
+ | |||
+ | xbindkeys({{ic|xbindkeys -f ~/.xbindkeysrc}})を起動します。サーバーは、{{ic|XF86Launch8}} / {{ic|XF86Launch9}} をマウスボタン 8/9 にマップするようになります。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === ウィンドウの代わりに黒い四角 === |
||
+ | |||
+ | おそらく、これはアプリケーションが Composite Xorg 拡張を厳密に必要としているためです。例えば、webkit ベースのアプリ:midori、psi-plus など。 |
||
+ | |||
+ | この場合、以下のようなコマンドで vncserver を再起動してください: |
||
+ | |||
+ | $ vncserver -geometry ... -depth 24 :1 +extension Composite |
||
+ | |||
+ | Composite 拡張は、VNC で 24 ビット深度でしか動作しないようです。 |
||
+ | |||
+ | === マウスカーソルのある空の黒いウィンドウ === |
||
+ | |||
+ | ユーザーが物理的な X セッションにログインしていないことを確認してください、{{ic|x0vncserver}} でこのオプションが設定されていない限り。単一のユーザーで複数の X セッションはサポートされていません。詳細は https://github.com/TigerVNC/tigervnc/issues/684#issuecomment-494385395 を参照してください。 |
||
+ | |||
+ | 逆に、VNC サーバーサービスがそのユーザーで動作している間にローカルの X セッションにログインしようとすると、うまくいかない可能性があり、デスクトップ環境を使用している場合、スプラッシュスクリーンで詰まることがあります。 |
||
+ | |||
+ | === マウスカーソルが表示されない === |
||
+ | |||
+ | ''x0vncserver'' を使用していてマウスカーソルが表示されない場合、以下のように ''vncviewer'' を起動してください: |
||
+ | |||
+ | $ vncviewer DotWhenNoCursor=1 ''サーバー'' |
||
+ | |||
+ | または、TigerVNC の設定ファイル(デフォルトで {{ic|~/.vnc/default.tigervnc}} にあります)に {{ic|1=DotWhenNoCursor=1}} を追加してください。 |
||
+ | |||
+ | === リモートマシンからのクリップボードの内容をコピーする === |
||
+ | |||
+ | リモートマシンからローカルマシンへのコピーが機能しない場合は、サーバー上で {{ic|autocutsel}} を実行してください。詳しくは [https://bbs.archlinux.org/viewtopic.php?id=101243] を参照: |
||
$ autocutsel -fork |
$ autocutsel -fork |
||
− | F8 を押して VNC メニューのポップアップを表示し、{{ic|Clipboard: local -> remote}} オプションを選択してください。 |
+ | 次に、{{ic|F8}} キーを押して VNC メニューのポップアップを表示し、{{ic|Clipboard: local -> remote}} オプションを選択してください。 |
+ | |||
+ | === ウィンドウ装飾 / 境界線 / タイトルバーがない / ウィンドウを動かせない === |
||
+ | 空の [[xterm]] フレームを修正するためにウィンドウマネージャーを起動してください。例えば、[[Xfce]] 上では {{ic|xfwm4 &}} を実行してください。 |
||
− | 上記のコマンドを {{ic|~/.vnc/xstartup}} に記述することで vncserver の起動時に自動で動作するようにすることができます。 |
||
− | === |
+ | === デスクトップ環境でフォントがボックスで表示される === |
+ | 一部の[[デスクトップ環境]]では、ASCII 文字を表示するための必要なフォントが欠けている可能性があります。{{pkg|ttf-dejavu}} を[[インストール]]してください。 |
||
− | {{ic|x0vncserver}} の使用時にマウスカーソルが表示されない場合、以下のように vncviewer を起動して下さい: |
||
+ | == 参照 == |
||
− | $ vncviewer DotWhenNoCursor=1 <server> |
||
+ | * https://github.com/TigerVNC/tigervnc |
||
− | もしくは tigervnc の設定ファイルに {{ic|DotWhenNoCursor<nowiki>=</nowiki>1}} を記述してください。デフォルトでは {{ic|~/.vnc/default.tigervnc}} に存在します。 |
2023年9月15日 (金) 20:58時点における最新版
TigerVNC は Virtual Network Computing (VNC) プロトコルの実装です。この記事ではサーバー機能に焦点をあてています。
目次
インストール
Vncserver には2つのリモート制御機能が存在します:
- 標準的な X サーバーと同じような仮想 (ヘッドレス) サーバー。物理的な画面ではなく仮想スクリーンを使用する。仮想サーバーは物理的な X サーバーと並行して動作します。
- 物理モニターを使用しているローカルの X セッションの直接制御。
vncserver をバーチャル(ヘッドレス)セッションで起動する
初回セットアップ
クイックスタートについては、以下のステップを参照してください。 設定オプションの完全なリストについては vncserver(8) を読むことをお勧めします。
vncpasswd
を使用してパスワードを作成して、ハッシュ化したパスワードを~/.vnc/passwd
に保存します。/etc/tigervnc/vncserver.users
を編集して、ユーザマッピングを定義します。このファイルで定義された各ユーザは、そのセッションが実行される対応するポートを持っています。ファイル内の数字は、TCP ポートに対応します。デフォルトでは、:1 が TCP ポート 5901 (5900+1) になっています。別の並列サーバが必要な場合、2 番目のインスタンスは次に高い空きポート、つまり 5902 (5900+2) で実行することができます。~/.vnc/config
を作成し、最低限session=foo
のような行で、実行するデスクトップ環境を foo に対応させたセッションの種類を定義してください。どのデスクトップ環境がシステムで利用できるかは、/usr/share/xsessions/
内の .desktop ファイルで確認できます。例えば:
~/.vnc/config
session=lxqt geometry=1920x1080 localhost alwaysshared
tigervnc の開始と終了
vncserver@.service
テンプレートのインスタンスを 起動 します。オプションで起動時やシャットダウン時に動くよう有効化します。この場合のインスタンス識別子はディスプレイ番号であることに注意してください(例:ディスプレイ番号 :1
のインスタンス vncserver@:1.service
など)。
ローカルディスプレイを直接公開する
Tigervnc は libvnc.so
を同梱しており、これは X の初期化中に直接ロードすることができます。これにより、パフォーマンスが向上します。
以下のファイルを作成し、X を再起動してください:
/etc/X11/xorg.conf.d/10-vnc.conf
Section "Module" Load "vnc" EndSection Section "Screen" Identifier "Screen0" Option "UserPasswdVerifier" "VncAuth" Option "PasswordFile" "/root/.vnc/passwd" EndSection
x0vncserver を直接実行してローカルディスプレイを制御する
tigervnc はまた、x0vncserver(1) も提供しており、これによって物理的な X セッションを直接制御することができます。vncpasswd ツールを使ってセッションパスワードを定義した後、以下のようにサーバーを起動します:
$ x0vncserver -rfbauth ~/.vnc/passwd
xprofile とともに
x0vncserver を簡単に起動する方法の一つは、xprofile ファイルの一つに以下のような行を追加することです:
~/.xprofile
... x0vncserver -rfbauth ~/.vnc/passwd &
systemd とともに
システムサービスとして
このオプションは、ユーザーが現在のディスプレイ、およびディスプレイマネージャーが提供するログイン画面にアクセスできるようにします。
このサービスは、ユーザーがセッションからログオフするたびに自動的に再起動されます。
以下の例では LightDM が使用されていますが、XAUTHORITY
変数を修正することで他のディスプレイマネージャーに適応させることが可能です。
/etc/systemd/system/x0vncserver.service
[Unit] Description=Remote desktop service (VNC) for :0 display Requires=display-manager.service After=network-online.target After=display-manager.service [Service] Type=simple Environment=HOME=/root Environment=XAUTHORITY=/var/run/lightdm/root/:0 ExecStart=x0vncserver -display :0 -rfbauth ~/.vnc/passwd Restart=on-failure RestartSec=500ms [Install] WantedBy=multi-user.target
このサービスはシステムユニットなので、-rfbauth ~/.vnc/passwd
は /root/.vnc/passwd
を指します。
x0vncserver.service
を開始/有効化してください。
ユーザーサービスとして
現在のデスクトップにリモートアクセスをすぐに設定できる最も簡単な方法として、x0vncserver を実行する VNC サーバーを持つために、以下のように systemd ユニットを作成して、必要なユーザーとオプションで置き換えてください:
~/.config/systemd/user/x0vncserver.service
[Unit] Description=Remote desktop service (VNC) [Service] Type=simple ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done' ExecStart=/usr/bin/x0vncserver -rfbauth %h/.vnc/passwd [Install] WantedBy=default.target
ExecStartPre
行は、${USER}
によって Xorg が開始されるのを待っています。
ユーザーネームとパスワードでログインする場合は、ExecStart
を /usr/bin/x0vncserver -PAMService=login -PlainUsers=${USER} -SecurityTypes=TLSPlain
に置き換えてください。
x0vncserver.service
ユーザーユニットを開始/有効化してください。
XDMCP と組み合わせて Xvnc をオンデマンドセッションで実行する
systemd のソケットアクティベーションと XDMCP を組み合わせることで、ログインしようとする各ユーザーごとに自動的に VNC サーバーを生成することができます。そのため、ユーザーごとにサーバー/ポートを設定する必要はありません。このセットアップでは、ディスプレイマネージャーを使用してユーザーを認証し、ログインするため、VNC パスワードは必要ありません。欠点としては、ユーザーがサーバー上でセッションを継続して後で再接続することはできません。
これを動作させるには、まず XDMCP を設定し、ディスプレイマネージャーが動作していることを確認してください。 次に、以下を作成します:
/etc/systemd/system/xvnc.socket
[Unit] Description=XVNC Server [Socket] ListenStream=5900 Accept=yes [Install] WantedBy=sockets.target
/etc/systemd/system/xvnc@.service
[Unit] Description=XVNC Per-Connection Daemon [Service] ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1080 -once -SecurityTypes=None User=nobody StandardInput=socket StandardError=syslog
xvnc.socket
を開始/有効化してください。これで、任意の数のユーザーがポート 5900 に接続することで独自のデスクトップを取得できます。
VNC サーバーがインターネットに公開されている場合は、xvnc@.service
の Xvnc
に -localhost
オプションを追加してください(-query localhost
と -localhost
は異なるスイッチです)、#Accessing vncserver via SSH tunnels に従ってください。接続後にユーザーを選択するだけなので、VNC サーバーはユーザー nobody として実行され、vncserver
スクリプトの代わりに直接 Xvnc
を使用するため、~/.vnc
のオプションは無視されます。オプションで、クリップボードが動作するように vncconfig を 自動起動させてください(vncconfig は非 VNC セッションで即座に終了します)。作成する一つの方法は:
/etc/X11/xinit/xinitrc.d/99-vncconfig.sh
#!/bin/sh vncconfig -nowin &
vncserver に接続する
vncserver に接続できるクライアントは多数存在します。下は 10.1.10.2 のポート 5901 (:1) で動作している vncserver に接続するコマンド例です:
$ vncviewer 10.1.10.2:1
パスワードなしで認証
-passwd
スイッチを使うことでサーバーの ~/.vnc/passwd
ファイルの場所を定義することができます。サーバー上のこのファイルには SSH か物理的なアクセスによってユーザーがアクセスすることが期待されています。どちらの場合でも、クライアントのファイルシステム上の安全な場所、つまり特定のユーザーだけが読み込みアクセスできる場所にファイルを置いて下さい。
$ vncviewer -passwd /path/to/server-passwd-file
GUI ベースのクライアント
TigerVNC の vncviewer にはシンプルが GUI が存在し、何もパラメータを付けずに実行します:
$ vncviewer
SSH トンネル経由で vncserver にアクセス
SSH 接続を提供するサーバの利点は、VNC トラフィックが SSH ポートを介してトンネリングされるため、既に開いている SSH ポート以外のポートを外部に開く必要がないことです。
サーバー側
サーバ側では、vncserver または、 x0vncserver を実行する必要があります。
これらのどちらかを実行する場合、~/.vnc/config
の localhost
オプション、または -localhost
スイッチ(x0vncserver の場合)を使用することをお勧めします。例えば
~/.vnc/config
session=lxqt geometry=1920x1080 localhost alwaysshared
例えば、vncserver@.service
を開始または再起動してください(#初回セットアップも参照してください)。
クライアント側
サーバーはローカルホストからの接続だけを許可しているので、-L スイッチを使ってトンネルを有効にして ssh で接続します。例えば:
$ ssh 10.1.10.2 -L 5901:localhost:5901
上記はサーバーのポート 5901 をクライアントのポート 5901 に転送します。サーバーとクライアントでポート番号を必ずしも一致させる必要はありません。例:
$ ssh 10.1.10.2 -L 8900:localhost:5901
上記のコマンドはサーバーのポート 5901 をクライアントマシンのポート 8900 に転送します。
SSH で接続したら、サーバーと接続するための暗号化トンネルとして xterm やシェルのウィンドウは開いたままにしてください。暗号化トンネルを使って接続するには、vncviewer でローカルホストのクライアントポートを指定します。
サーバーとクライアントで同じポートを使用する場合:
$ vncviewer localhost:1
サーバーとクライアントで違うポートを使用する場合:
$ vncviewer localhost:8900
SSH で Android デバイスから VNC サーバーに接続する
Android デバイスを使って SSH で VNC サーバーに接続するには:
1. 接続するマシン上で SSH サーバーを動作させる。 2. 接続するマシン上で VNC サーバーを動作させる (上述のように -localhost フラグでサーバーを起動する)。 3. Android デバイスで SSH クライアントを使う (ConnectBot が人気があります、この外では例としてこれを使います)。 4. Android デバイスで VNC クライアントを使う (androidVNC)。
固定 IP アドレスを持たないマシンではダイナミック DNS サービスを使うことを考慮してください。
ConnectBot で、IP を入力してマシンに接続してください。オプションキーをタップして、Port Forwards を選択し新しいポートを追加してください:
Nickname: vnc Type: Local Source port: 5901 Destination: 127.0.0.1:5901 (it did not work for me when I typed in 192.168.x.xxx here, I had to use 127.0.0.1)
保存してください。
androidVNC で:
Nickname: nickname Password: the password used to set up the VNC server Address: 127.0.0.1 (we are in local after connecting through SSH) Port: 5901
接続してください。
ヒントとテクニック
macOS に接続する
https://help.ubuntu.com/community/AppleRemoteDesktop を見てください。Remmina でテスト済みです。
推奨セキュリティ設定
SecurityTypes は使用するセキュリティアルゴリズムを制御します。現在のバージョン 1.5.0 でのデフォルトは "X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None" です。"X509Vnc,TLSVnc" とすることで暗号化しないデータのやりとりを無効化できます。
TLSVnc では同一性確認がないため、X509Vnc を使うことを推奨します:
$ vncserver -x509key /path/to/key.pem -x509cert /path/to/cerm.pem -SecurityTypes X509Vnc :1
x509 証明書の作成方法はこの記事では説明しません。Let’s Encrypt を使用したり、OpenSSL を使って手動で証明書を発行してサーバーとクライアントで鍵を共有できます。
フルスクリーンの切り替え
これは VNC クライアントのメニューから行うことができます。デフォルトでは、VNC クライアントの mkey は F8
です。
マウスの戻る/進むボタンが動作しない場合の回避策
現在の VNC プロトコルは 7つのマウスボタン(左、中、右、スクロールアップ、スクロールダウン、スクロール左、スクロール右)しか使用していないため、マウスに戻るボタンと進むボタンがある場合、これらは使用できず、入力は無視されます。
evrouter は、マウスの戻る/進むボタンをクリックしたときにキーボードのキー押下を送信してこの制限を回避するために使用できます。オプションで、xautomation と xbindkeys をサーバーで使用して、必要に応じてキーボードのキー押下をマウスボタンのクリックにマップバックできます。
キーボードキー XF86Back/XF86Forward でマウスの戻る/進むボタンを代用する
この方法はシンプルで、例えば Web ブラウザやファイルブラウザを使用している間に戻る/進むをナビゲートする方法が必要な場合に適しています。
クライアントで evrouterAUR と xautomation をインストールします。evrouter を設定します。正確なデバイス名、ウィンドウ名、ボタン名などを見つける方法とヒントについては、マウスボタン#evrouter と evrouter の man ページを参照してください。例の設定は以下の通りです:
~/.evrouterrc
Window "OtherComputer:0 - TigerVNC": # Window title used as filter # Using Shell to avoid repeating key presses (see evrouter manual) "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/275 "Shell/xte 'key XF86Back'" "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/276 "Shell/xte 'key XF86Forward'" # Use XKey below instead if repeating keys is desired (see evrouter manual) #"Logitech Gaming Mouse G400" "/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse" none key/275 "XKey/XF86Back" #"Logitech Gaming Mouse G400" "/dev/input/by-id/usb-Logitech_Gaming_Mouse_G400-event-mouse" none key/276 "XKey/XF86Forward"
クライアントで evrouter を起動します。上記の設定で、マウスの戻るボタンをクリックすると VNC サーバーに XF86Back
が送信され、進むボタンをクリックすると XF86Forward
が送信されます。
サーバーでキーボードキー押下をマウスボタンクリックにマップバックする
必要に応じて、サーバーでキーボードキーをマウスボタンクリックにマップバックすることが可能です。この場合、クライアントやサーバーで絶対に使用されないキーボードキーを使用することが良いでしょう。以下の例では、キーボードキー XF86Launch8
/ XF86Launch9
がマウスボタン 8/9 として使用されています。
クライアントでの evrouter 設定:
~/.evrouterrc
Window "OtherComputer:0 - TigerVNC": # ウィンドウタイトル # キー押下を繰り返さないように Shell を使用(evrouter マニュアルを参照) "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/275 "Shell/xte 'key XF86Launch8'" "USB mouse" "/dev/input/by-id/usb-Mouse-name-event-mouse" none key/276 "Shell/xte 'key XF86Launch9'"
サーバーで xautomation と xbindkeys をインストールします。xbindkeys を設定して、キーボードキー XF86Launch8
/ XF86Launch9
を xte を使ってマウスボタン 8/9 にマップします。
~/.xbindkeysrc
"xte 'mouseclick 8'" XF86Launch8 "xte 'mouseclick 9'" XF86Launch9
xbindkeys(xbindkeys -f ~/.xbindkeysrc
)を起動します。サーバーは、XF86Launch8
/ XF86Launch9
をマウスボタン 8/9 にマップするようになります。
トラブルシューティング
ウィンドウの代わりに黒い四角
おそらく、これはアプリケーションが Composite Xorg 拡張を厳密に必要としているためです。例えば、webkit ベースのアプリ:midori、psi-plus など。
この場合、以下のようなコマンドで vncserver を再起動してください:
$ vncserver -geometry ... -depth 24 :1 +extension Composite
Composite 拡張は、VNC で 24 ビット深度でしか動作しないようです。
マウスカーソルのある空の黒いウィンドウ
ユーザーが物理的な X セッションにログインしていないことを確認してください、x0vncserver
でこのオプションが設定されていない限り。単一のユーザーで複数の X セッションはサポートされていません。詳細は https://github.com/TigerVNC/tigervnc/issues/684#issuecomment-494385395 を参照してください。
逆に、VNC サーバーサービスがそのユーザーで動作している間にローカルの X セッションにログインしようとすると、うまくいかない可能性があり、デスクトップ環境を使用している場合、スプラッシュスクリーンで詰まることがあります。
マウスカーソルが表示されない
x0vncserver を使用していてマウスカーソルが表示されない場合、以下のように vncviewer を起動してください:
$ vncviewer DotWhenNoCursor=1 サーバー
または、TigerVNC の設定ファイル(デフォルトで ~/.vnc/default.tigervnc
にあります)に DotWhenNoCursor=1
を追加してください。
リモートマシンからのクリップボードの内容をコピーする
リモートマシンからローカルマシンへのコピーが機能しない場合は、サーバー上で autocutsel
を実行してください。詳しくは [1] を参照:
$ autocutsel -fork
次に、F8
キーを押して VNC メニューのポップアップを表示し、Clipboard: local -> remote
オプションを選択してください。
ウィンドウ装飾 / 境界線 / タイトルバーがない / ウィンドウを動かせない
空の xterm フレームを修正するためにウィンドウマネージャーを起動してください。例えば、Xfce 上では xfwm4 &
を実行してください。
デスクトップ環境でフォントがボックスで表示される
一部のデスクトップ環境では、ASCII 文字を表示するための必要なフォントが欠けている可能性があります。ttf-dejavu をインストールしてください。