「TigerVNC」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
 
(2人の利用者による、間の28版が非表示)
1行目: 1行目:
[[Category:セキュリティ]]
 
 
[[Category:リモートデスクトップ]]
 
[[Category:リモートデスクトップ]]
  +
[[Category:サーバー]]
 
[[de:VNC]]
 
[[de:VNC]]
 
[[en:TigerVNC]]
 
[[en:TigerVNC]]
8行目: 8行目:
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|x11vnc}}
 
{{Related|x11vnc}}
  +
{{Related|TurboVNC}}
 
{{Related articles end}}
 
{{Related articles end}}
[http://tigervnc.org/ TigerVNC] は [[Wikipedia:VNC|VNC]] プロトコルの実装です。この記事ではサーバー機能に焦点をあてています。
+
[http://tigervnc.org/ TigerVNC] は [[Wikipedia:Virtual Network Computing|Virtual Network Computing]] (VNC) プロトコルの実装です。この記事ではサーバー機能に焦点をあてています。
   
 
== インストール ==
 
== インストール ==
20行目: 21行目:
 
# 物理モニターを使用しているローカルの X セッションの直接制御。
 
# 物理モニターを使用しているローカルの X セッションの直接制御。
   
== 仮想 (ヘッドレス) セッションで vncserver を実行 ==
+
== vncserver をバーチャル(ヘッドレス)セッションで起動する ==
   
  +
=== 初回セットアップ ===
=== 環境, 設定, パスワードファイルの作成 ===
 
Vncserver は最初の実行時に環境, 設定, ユーザーパスワードファイルを作成します。作成されたファイルは {{ic|~/.vnc}} に保存されます。
 
   
  +
{{Note|Linux システムでは物理メモリが許すかぎりいくらでも VNC サーバーを使うことができます。それぞれは互いに並行して動きます。}}
{{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) に2番目のインスタンスが作成されます。
 
   
  +
=== 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] を参照してください。}}
==== 環境ファイルの編集 ====
 
   
  +
== ローカルディスプレイを直接公開する ==
Vncserver は {{ic|~/.vnc/xstartup}} を読み込んで [[.xinitrc]] ファイルのように使います。ユーザーはこのファイルから DE を起動してください。詳しくは[[一般的な推奨事項#デスクトップ環境]]を参照。
 
   
  +
Tigervnc は {{ic|libvnc.so}} を同梱しており、これは X の初期化中に直接ロードすることができます。これにより、パフォーマンスが向上します。
例えば、[[LXQt]] を起動するには:
 
  +
以下のファイルを作成し、X を再起動してください:
   
{{hc|~/.vnc/xstartup|
+
{{hc|/etc/X11/xorg.conf.d/10-vnc.conf|
  +
Section "Module"
<nowiki>#!/bin/sh
 
  +
Load "vnc"
exec startlxqt
 
  +
EndSection
</nowiki>}}
 
   
  +
Section "Screen"
==== 設定ファイルの編集 (任意) ====
 
  +
Identifier "Screen0"
  +
Option "UserPasswdVerifier" "VncAuth"
  +
Option "PasswordFile" "/root/.vnc/passwd"
  +
EndSection
  +
}}
   
  +
== x0vncserver を直接実行してローカルディスプレイを制御する ==
tigervnc 1.60-1 から {{ic|~/.vnc/config}} のオプションが読み込まれるようになり、毎回 {{ic|vncserver}} にコマンドラインスイッチを指定する必要がなくなりました。ファイルは1行1オプションで記述します。例:
 
{{hc|~/.vnc/config|
 
<nowiki>
 
## Supported server options to pass to vncserver upon invocation can be listed
 
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
 
## Several common ones are shown below. Uncomment and modify to your liking.
 
##
 
securitytypes=tlsvnc
 
desktop=sandbox
 
geometry=1200x700
 
dpi=96
 
localhost
 
alwaysshared
 
</nowiki>}}
 
   
  +
{{Pkg|tigervnc}} はまた、{{man|1|x0vncserver}} も提供しており、これによって物理的な X セッションを直接制御することができます。''vncpasswd'' ツールを使ってセッションパスワードを定義した後、以下のようにサーバーを起動します:
=== systemd で vncserver を起動・停止 ===
 
Systemd のユーザーサービスやシステムサービスを使うことで、サービスとして vncserver を管理することができます。どちらの方法も下で説明します。
 
   
  +
$ x0vncserver -rfbauth ~/.vnc/passwd
==== ユーザーモード ====
 
{{Note|ユーザーがログアウトしても vncserver が実行し続けるようにするために、loginctl を使って linger オプションを有効にしてください: {{ic|# loginctl enable-linger username}}。linger を有効にしないとログオフしたときに vncserver が終了してしまいます。}}
 
   
  +
{{Note|
ユーザーモードでサービスを起動:
 
  +
* [[x11vnc]] は、現在の X セッションを直接制御できる代替の VNC サーバーでもあります。
$ systemctl --user start vncserver@:1
 
  +
* {{ic|x0vncserver}} は現在、クライアントとサーバー間のクリップボード共有をサポートしていません({{ic|autocutsel}} の助けを借りても)。参照:[https://github.com/TigerVNC/tigervnc/issues/529 Issue #529]。
  +
}}
   
  +
=== xprofile とともに ===
ユーザーモードでサービスを有効化:
 
$ systemctl --user enable vncserver@:1
 
   
  +
''x0vncserver'' を簡単に起動する方法の一つは、[[xprofile]] ファイルの一つに以下のような行を追加することです:
==== システムモード ====
 
   
  +
{{hc|~/.xprofile|
{{Warning|ローカルネットワークが信頼できない場合は以下のサービスを使ってはいけません。}}
 
  +
...
  +
x0vncserver -rfbauth ~/.vnc/passwd &
  +
}}
   
  +
=== systemd とともに ===
{{ic|/etc/systemd/system/vncserver@'':1''.service}} を作成してください ({{ic|:1}} は {{ic|$DISPLAY}} [[環境変数]]の値に置き換えてください)。
 
   
  +
==== システムサービスとして ====
サーバーを実行するユーザー ({{ic|1=User=}}) や vncserver のオプション ({{ic|1=usr/bin/vncserver %i -arg1 -arg2 -argn}}) などサービスは適宜修正してください。
 
   
  +
このオプションは、ユーザーが現在のディスプレイ、およびディスプレイマネージャーが提供するログイン画面にアクセスできるようにします。
{{hc|/etc/systemd/system/vncserver@'':1''.service|<nowiki>
 
  +
  +
このサービスは、ユーザーがセッションからログオフするたびに自動的に再起動されます。
  +
  +
以下の例では [[LightDM]] が使用されていますが、{{ic|XAUTHORITY}} 変数を修正することで他のディスプレイマネージャーに適応させることが可能です。
  +
  +
{{hc|/etc/systemd/system/x0vncserver.service|2=
 
[Unit]
 
[Unit]
Description=Remote desktop service (VNC)
+
Description=Remote desktop service (VNC) for :0 display
  +
Requires=display-manager.service
After=syslog.target network.target
 
  +
After=network-online.target
  +
After=display-manager.service
   
 
[Service]
 
[Service]
 
Type=simple
 
Type=simple
  +
Environment=HOME=/root
User=foo
 
  +
Environment=XAUTHORITY=/var/run/lightdm/root/:0
PAMName=login
 
  +
ExecStart=x0vncserver -display :0 -rfbauth ~/.vnc/passwd
PIDFile=/home/foo/.vnc/%H:%i.pid
 
  +
Restart=on-failure
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
 
  +
RestartSec=500ms
ExecStart=/usr/bin/vncserver -geometry 1440x900 -alwaysshared -fg %i
 
ExecStop=/usr/bin/vncserver -kill %i
 
   
 
[Install]
 
[Install]
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
  +
}}
</nowiki>}}
 
   
  +
このサービスはシステムユニットなので、{{ic|-rfbauth ~/.vnc/passwd}} は {{ic|/root/.vnc/passwd}} を指します。
{{ic|vncserver@'':1''.service}} を[[起動]]してください。ブート時に実行されるようにするには[[有効化]]してください。
 
   
  +
{{ic|x0vncserver.service}} を[[開始/有効化]]してください。
==== マルチユーザーモード ====
 
systemd のソケットアクティベーションと [[Xdmcp|XDMCP]] を組み合わせることでユーザーがログインするたびに VNC サーバーを自動的に生成することができます。ユーザーごとにサーバーとポートを設定する必要がなくなります。以下の設定ではディスプレイマネージャを使用してユーザーの認証を行っているため、VNC のパスワードも不要です。欠点としてはユーザーがサーバー上のセッションを一度抜けると再接続できないという点が挙げられます。以下のユニットを使うには、まず [[Xdmcp|XDMCP]] をセットアップしてディスプレイマネージャが動作するようにしてください。
 
   
  +
==== ユーザーサービスとして ====
{{hc|/etc/systemd/system/xvnc.socket|<nowiki>
 
[Unit]
 
Description=XVNC Server
 
   
  +
現在のデスクトップにリモートアクセスをすぐに設定できる最も簡単な方法として、''x0vncserver'' を実行する VNC サーバーを持つために、以下のように ''systemd'' ユニットを作成して、必要なユーザーとオプションで置き換えてください:
[Socket]
 
ListenStream=5900
 
Accept=yes
 
   
  +
{{hc|~/.config/systemd/user/x0vncserver.service|2=
[Install]
 
WantedBy=sockets.target
 
</nowiki>}}
 
{{hc|/etc/systemd/system/xvnc@.service|<nowiki>
 
 
[Unit]
 
[Unit]
Description=XVNC Per-Connection Daemon
+
Description=Remote desktop service (VNC)
   
 
[Service]
 
[Service]
  +
Type=simple
ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1080 -once -SecurityTypes=None
 
  +
ExecStartPre=/bin/sh -c 'while ! pgrep -U "$USER" Xorg; do sleep 2; done'
User=nobody
 
  +
ExecStart=/usr/bin/x0vncserver -rfbauth %h/.vnc/passwd
StandardInput=socket
 
StandardError=syslog
 
</nowiki>}}
 
systemctl を使って {{ic|xvnc.socket}} を[[起動]]・[[有効化]]してください。ポート 5900 に接続することで何人でもデスクトップを表示することができます。
 
   
  +
[Install]
VNC サーバーにインターネットから接続する場合、{{ic|xvnc@.service}} の {{ic|Xvnc}} に {{ic|-localhost}} オプションを追加して、下の説明を読んで SSH 経由で接続するようにしてください ({{ic|-query localhost}} の 'localhost' は {{ic|-localhost}} とは違います)。接続後にユーザーを選択するため、VNC サーバーは 'nobody' ユーザーで動作し 'vncserver' スクリプトの代わりに xvnc を直接使用します。そのため {{ic|~/.vnc}} のオプションは無視されます。任意で {{ic|vncconfig}} を[[自動起動]]することでクリップボードを機能させることができます (VNC 以外のセッションでは {{ic|vncconfig}} はすぐに終了します)。以下のファイルを作成してください:
 
  +
WantedBy=default.target
{{hc|/etc/X11/xinit/xinitrc.d/99-vncconfig.sh|<nowiki>
 
  +
}}
#!/bin/sh
 
vncconfig -nowin &
 
</nowiki>}}
 
   
  +
{{ic|ExecStartPre}} 行は、{{ic|${USER}<nowiki/>}} によって Xorg が開始されるのを待っています。
== 物理ディスプレイで vncserver を実行 ==
 
   
  +
ユーザーネームとパスワードでログインする場合は、{{ic|ExecStart}} を {{ic|1=/usr/bin/x0vncserver -PAMService=login -PlainUsers=${USER} -SecurityTypes=TLSPlain}} に置き換えてください。
=== TigerVNC の x0vncserver を使う ===
 
{{Pkg|tigervnc}} には物理的な X セッションを直接操作できる x0vncserver バイナリが入っています。以下のようにして実行してください:
 
$ x0vncserver -display :0 -passwordfile ~/.vnc/passwd
 
   
  +
{{ic|x0vncserver.service}} ユーザーユニットを[[開始/有効化]]してください。
詳しくは x0vncserver の [[man ページ]]を参照。
 
   
  +
== XDMCP と組み合わせて Xvnc をオンデマンドセッションで実行する ==
==== systemd で x0vncserver を起動・停止 ====
 
   
  +
''systemd'' のソケットアクティベーションと [[XDMCP]] を組み合わせることで、ログインしようとする各ユーザーごとに自動的に VNC サーバーを生成することができます。そのため、ユーザーごとにサーバー/ポートを設定する必要はありません。このセットアップでは、ディスプレイマネージャーを使用してユーザーを認証し、ログインするため、VNC パスワードは必要ありません。欠点としては、ユーザーがサーバー上でセッションを継続して後で再接続することはできません。
{{Warning|ローカルネットワークが信頼できない場合は以下のサービスを使ってはいけません。}}
 
   
  +
これを動作させるには、まず [[XDMCP]] を設定し、ディスプレイマネージャーが動作していることを確認してください。
VNC サーバーで x0vncserver を実行するには、systemd ユニットを作成します。現在のデスクトップにリモートからアクセスする一番簡単な方法です。
 
  +
次に、以下を作成します:
   
  +
{{hc|/etc/systemd/system/xvnc.socket|2=
{{Note|以下のユニットはユーザーによって X セッションが実行されている場合にのみ使用することができます。}}
 
  +
[Unit]
  +
Description=XVNC Server
   
  +
[Socket]
{{ic|/etc/systemd/system/x0vncserver.service}} を作成してサーバーを実行するユーザーやオプションを指定してください:
 
  +
ListenStream=5900
  +
Accept=yes
   
  +
[Install]
{{hc|/etc/systemd/system/x0vncserver.service|
 
  +
WantedBy=sockets.target
<nowiki>
 
  +
}}
  +
  +
{{hc|/etc/systemd/system/xvnc@.service|2=
 
[Unit]
 
[Unit]
Description=Remote desktop service (VNC)
+
Description=XVNC Per-Connection Daemon
After=syslog.target network.target
 
   
 
[Service]
 
[Service]
  +
ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1080 -once -SecurityTypes=None
Type=forking
 
User=foo
+
User=nobody
  +
StandardInput=socket
ExecStart=/usr/bin/sh -c '/usr/bin/x0vncserver -display :0 -rfbport 5900 -passwordfile /home/foo/.vnc/passwd &'
 
  +
StandardError=syslog
  +
}}
   
  +
{{ic|xvnc.socket}} を[[開始/有効化]]してください。これで、任意の数のユーザーがポート 5900 に接続することで独自のデスクトップを取得できます。
[Install]
 
WantedBy=multi-user.target
 
</nowiki>}}
 
   
  +
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 セッションで即座に終了します)。作成する一つの方法は:
=== x11vnc を使う ===
 
  +
{{pkg|x11vnc}} には利点と欠点が存在しアクセスするのに root を必要とします。詳しくは [[X11vnc]] を見てください。
 
  +
{{hc|/etc/X11/xinit/xinitrc.d/99-vncconfig.sh|
  +
#!/bin/sh
  +
vncconfig -nowin &
  +
}}
   
 
== vncserver に接続する ==
 
== vncserver に接続する ==
200行目: 199行目:
 
* {{Pkg|vinagre}}
 
* {{Pkg|vinagre}}
 
* {{Pkg|remmina}}
 
* {{Pkg|remmina}}
* {{Pkg|vncviewer-jar}}
+
* {{AUR|vncviewer-jar}}
   
 
TigerVNC の vncviewer にはシンプルが GUI が存在し、何もパラメータを付けずに実行します:
 
TigerVNC の vncviewer にはシンプルが GUI が存在し、何もパラメータを付けずに実行します:
206行目: 205行目:
   
 
== SSH トンネル経由で vncserver にアクセス ==
 
== SSH トンネル経由で vncserver にアクセス ==
  +
SSH 接続を提供するサーバの利点は、VNC トラフィックが SSH ポートを介してトンネリングされるため、既に開いている SSH ポート以外のポートを外部に開く必要がないことです。
SSH トンネリングの利点は他のポートを開く必要がなく、文字通り通信がトンネル化されるということです。ユーザーは WAN に対して既に開いている SSH ポートを使用することができます。以下の方法で vncserver を実行する際は {{ic|-localhost}} スイッチを使用してローカルホストからの接続だけを許可するようにすることを強く推奨します。物理的にマシンに ssh することができるユーザーだけが vncserver を使えるようになります。
 
 
{{Note|TigerVNC は SecurityTypes パラメータを変更したいかぎりデフォルトで TLSVnc 暗号を使用します。認証や通信は暗号化されますが、通信相手の確認はしません。サーバーの同一性を確認することができる X509Vnc などの暗号化も TigerVNC によってサポートされています。サーバー側の SecurityTypes でセキュアでないオプション (None, VncAuth, Plain, TLSNone, TLSPlain, X509None, X509Plain) が優先されるように設定されている場合、暗号化を使用することはできません。その場合、SSH で VNC をトンネル化できます。vncviewer を動作させるときは、SecurityTypes を明示的に設定して暗号化していない通信を許可しないようにすると良いでしょう。}}
 
   
 
=== サーバー側 ===
 
=== サーバー側 ===
以下は -localhost フラグを使って vncserver を起動するコマンド例です:
 
$ vncserver -geometry 1440x900 -alwaysshared -dpi 96 -localhost :1
 
   
  +
サーバ側では、''vncserver'' または、 ''x0vncserver'' を実行する必要があります。
もしくは、{{ic|~/.vnc/config}} に "localhost" オプションを追加してください。以下は上記コマンドと同じ設定例です:
 
  +
{{hc|~/.vnc/config|
 
  +
これらのどちらかを実行する場合、{{ic|~/.vnc/config}} の {{ic|localhost}} オプション、または {{ic|-localhost}} スイッチ(''x0vncserver'' の場合)を使用することをお勧めします。例えば
<nowiki>
 
  +
## Supported server options to pass to vncserver upon invocation can be listed
 
  +
{{hc|~/.vnc/config|2=
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
 
  +
session=lxqt
## Several common ones are shown below. Uncomment and modify to your liking.
 
  +
geometry=1920x1080
##
 
geometry=1200x700
 
alwaysshared
 
dpi=96
 
 
localhost
 
localhost
  +
alwaysshared
</nowiki>}}
 
  +
}}
  +
  +
例えば、{{ic|vncserver@.service}} を[[開始]]または[[再起動]]してください([[#初回セットアップ]]も参照してください)。
   
 
=== クライアント側 ===
 
=== クライアント側 ===
276行目: 271行目:
 
接続してください。
 
接続してください。
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
   
 
=== macOS に接続する ===
 
=== macOS に接続する ===
282行目: 277行目:
 
https://help.ubuntu.com/community/AppleRemoteDesktop を見てください。[[Remmina]] でテスト済みです。
 
https://help.ubuntu.com/community/AppleRemoteDesktop を見てください。[[Remmina]] でテスト済みです。
   
  +
=== 推奨セキュリティ設定 ===
=== リモートマシンからローカルにクリップボードの内容をコピーする ===
 
  +
{{Note|[[#SSH トンネル経由で vncserver にアクセス|SSH トンネル]]を使用する場合、sshd によって暗号化が行われるため X509Vnc は不要です。}}
   
  +
SecurityTypes は使用するセキュリティアルゴリズムを制御します。現在のバージョン 1.5.0 でのデフォルトは "X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None" です。"X509Vnc,TLSVnc" とすることで暗号化しないデータのやりとりを無効化できます。
リモートマシンからローカルマシンへのコピーが動作しない場合、サーバー上で以下のように autocutsel を起動して下さい [https://bbs.archlinux.org/viewtopic.php?id=101243]:
 
   
  +
TLSVnc では同一性確認がないため、X509Vnc を使うことを推奨します:
$ autocutsel -fork
 
   
  +
$ vncserver -x509key /path/to/key.pem -x509cert /path/to/cerm.pem -SecurityTypes X509Vnc :1
F8 を押して VNC メニューのポップアップを表示し、{{ic|Clipboard: local -> remote}} オプションを選択してください。
 
   
  +
x509 証明書の作成方法はこの記事では説明しません。[[Let’s Encrypt]] を使用したり、[[OpenSSL]] を使って手動で証明書を発行してサーバーとクライアントで鍵を共有できます。
上記のコマンドを {{ic|~/.vnc/xstartup}} に記述することで vncserver の起動時に自動で動作するようにすることができます。
 
   
=== マウソルが表示されない問題 ===
+
=== フルクリンの切り替え ===
   
  +
これは VNC クライアントのメニューから行うことができます。デフォルトでは、VNC クライアントの mkey は {{ic|F8}} です。
{{ic|x0vncserver}} の使用時にマウスカーソルが表示されない場合、以下のように vncviewer を起動して下さい:
 
   
  +
=== マウスの戻る/進むボタンが動作しない場合の回避策 ===
$ vncviewer DotWhenNoCursor=1 <server>
 
   
  +
現在の VNC プロトコルは 7つのマウスボタン(左、中、右、スクロールアップ、スクロールダウン、スクロール左、スクロール右)しか使用していないため、マウスに戻るボタンと進むボタンがある場合、これらは使用できず、入力は無視されます。
もしくは tigervnc の設定ファイルに {{ic|DotWhenNoCursor<nowiki>=</nowiki>1}} を記述してください。デフォルトでは {{ic|~/.vnc/default.tigervnc}} に存在します。
 
   
  +
[https://www.bedroomlan.org/projects/evrouter/ evrouter] は、マウスの戻る/進むボタンをクリックしたときにキーボードのキー押下を送信してこの制限を回避するために使用できます。オプションで、{{Pkg|xautomation}} と {{Pkg|xbindkeys}} をサーバーで使用して、必要に応じてキーボードのキー押下をマウスボタンのクリックにマップバックできます。
=== 推奨セキュリティ設定 ===
 
{{Note|[[#SSH トンネル経由で vncserver にアクセス|SSH トンネル]]を使用する場合、sshd によって暗号化が行われるため X509Vnc は不要です。}}
 
   
  +
==== キーボードキー XF86Back/XF86Forward でマウスの戻る/進むボタンを代用する ====
SecurityTypes は使用するセキュリティアルゴリズムを制御します。現在のバージョン 1.5.0 でのデフォルトは "X509Plain,TLSPlain,X509Vnc,TLSVnc,X509None,TLSNone,VncAuth,None" です。"X509Vnc,TLSVnc" とすることで暗号化しないデータのやりとりを無効化できます。
 
   
  +
この方法はシンプルで、例えば Web ブラウザやファイルブラウザを使用している間に戻る/進むをナビゲートする方法が必要な場合に適しています。
TLSVnc では同一性確認がないため、X509Vnc を使うことを推奨します:
 
   
  +
クライアントで {{AUR|evrouter}} と {{Pkg|xautomation}} をインストールします。evrouter を設定します。正確なデバイス名、ウィンドウ名、ボタン名などを見つける方法とヒントについては、[[マウスボタン#evrouter]] と evrouter の man ページを参照してください。例の設定は以下の通りです:
$ vncserver -x509key /path/to/key.pem -x509cert /path/to/cerm.pem -SecurityTypes X509Vnc :1
 
   
  +
{{hc|~/.evrouterrc|
x509 証明書の作成方法はこの記事では説明しません。[[Let’s Encrypt]] を使用したり、[[OpenSSL]] を使って手動で証明書を発行してサーバーとクライアントで鍵を共有できます。
 
  +
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
  +
  +
次に、{{ic|F8}} キーを押して VNC メニューのポップアップを表示し、{{ic|Clipboard: local -> remote}} オプションを選択してください。
  +
  +
=== ウィンドウ装飾 / 境界線 / タイトルバーがない / ウィンドウを動かせない ===
  +
  +
空の [[xterm]] フレームを修正するためにウィンドウマネージャーを起動してください。例えば、[[Xfce]] 上では {{ic|xfwm4 &}} を実行してください。
  +
  +
=== デスクトップ環境でフォントがボックスで表示される ===
   
  +
一部の[[デスクトップ環境]]では、ASCII 文字を表示するための必要なフォントが欠けている可能性があります。{{pkg|ttf-dejavu}} を[[インストール]]してください。
vncclient のメニューから切り替えることができます。デフォルトでは vncclient のメニューは F8 で呼び出せます。
 
   
  +
== 参照 ==
=== 小なり記号が入力できない (<) ===
 
リモートクライアントで {{ic|<}} と入力すると {{ic|>}} が出力される場合、キーのマッピングを変更してみてください [https://insaner.com/blog/2013/05.html#20130422063137]:
 
   
  +
* https://github.com/TigerVNC/tigervnc
$ x0vncserver -RemapKeys="0x3c->0x2c"
 

2023年9月15日 (金) 20:58時点における最新版

関連記事

TigerVNCVirtual Network Computing (VNC) プロトコルの実装です。この記事ではサーバー機能に焦点をあてています。

目次

インストール

tigervnc パッケージをインストールしてください。

ノート: パッケージには vncserver, x0vncserver, vncviewer が含まれています。

Vncserver には2つのリモート制御機能が存在します:

  1. 標準的な X サーバーと同じような仮想 (ヘッドレス) サーバー。物理的な画面ではなく仮想スクリーンを使用する。仮想サーバーは物理的な X サーバーと並行して動作します。
  2. 物理モニターを使用しているローカルの X セッションの直接制御。

vncserver をバーチャル(ヘッドレス)セッションで起動する

初回セットアップ

ノート: Linux システムでは物理メモリが許すかぎりいくらでも VNC サーバーを使うことができます。それぞれは互いに並行して動きます。

クイックスタートについては、以下のステップを参照してください。 設定オプションの完全なリストについては vncserver(8) を読むことをお勧めします。

  1. vncpasswd を使用してパスワードを作成して、ハッシュ化したパスワードを ~/.vnc/passwd に保存します。
  2. /etc/tigervnc/vncserver.users を編集して、ユーザマッピングを定義します。このファイルで定義された各ユーザは、そのセッションが実行される対応するポートを持っています。ファイル内の数字は、TCP ポートに対応します。デフォルトでは、:1 が TCP ポート 5901 (5900+1) になっています。別の並列サーバが必要な場合、2 番目のインスタンスは次に高い空きポート、つまり 5902 (5900+2) で実行することができます。
  3. ~/.vnc/config を作成し、最低限 session=foo のような行で、実行するデスクトップ環境を foo に対応させたセッションの種類を定義してください。どのデスクトップ環境がシステムで利用できるかは、/usr/share/xsessions/ 内の .desktop ファイルで確認できます。例えば:
~/.vnc/config
session=lxqt
geometry=1920x1080
localhost
alwaysshared
ノート: 前のステップを完全に動作させるには、追加のセキュリティ設定が必要です。設定を完了するには、#SSHトンネル経由での vncserver へのアクセスを参照してください。テスト目的では、この手順を省略して localhost 以外からの安全でない接続を許可します。

tigervnc の開始と終了

vncserver@.service テンプレートのインスタンスを 起動 します。オプションで起動時やシャットダウン時に動くよう有効化します。この場合のインスタンス識別子はディスプレイ番号であることに注意してください(例:ディスプレイ番号 :1 のインスタンス vncserver@:1.service など)。

ノート: /usr/bin/vncserver への直接の呼び出しは、適切なセッションスコープを確立しないため、サポートされていません。systemd サービスは TigerVNC を使うために唯一サポートされている方法です。Issue #1096 を参照してください。

ローカルディスプレイを直接公開する

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
ノート:
  • x11vnc は、現在の X セッションを直接制御できる代替の VNC サーバーでもあります。
  • x0vncserver は現在、クライアントとサーバー間のクリップボード共有をサポートしていません(autocutsel の助けを借りても)。参照:Issue #529

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@.serviceXvnc-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 に接続する

警告: LAN の外でセキュアな対策を取ることなく vncserver に接続することは推奨されません。LAN の外側で接続する必要がある場合は下の説明を読むことを推奨します。SecurityTypes をセキュアでないオプションに設定しないかぎり TigerVNC はデフォルトで暗号化されますが、通信相手の確認はしないため接続時の MITM 攻撃を防ぐことはできません。セキュアな接続をするときは X509Vnc を使うことを推奨します。

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/configlocalhost オプション、または -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 でテスト済みです。

推奨セキュリティ設定

ノート: SSH トンネルを使用する場合、sshd によって暗号化が行われるため X509Vnc は不要です。

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 は、マウスの戻る/進むボタンをクリックしたときにキーボードのキー押下を送信してこの制限を回避するために使用できます。オプションで、xautomationxbindkeys をサーバーで使用して、必要に応じてキーボードのキー押下をマウスボタンのクリックにマップバックできます。

キーボードキー XF86Back/XF86Forward でマウスの戻る/進むボタンを代用する

この方法はシンプルで、例えば Web ブラウザやファイルブラウザを使用している間に戻る/進むをナビゲートする方法が必要な場合に適しています。

クライアントで evrouterAURxautomation をインストールします。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'"

サーバーで xautomationxbindkeys をインストールします。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インストールしてください。

参照