この記事を作った動機
最近 Microsoft 社のネイティブの RDP クライアントや MS Store で配布されている純正 RDP クライアントや Windows に標準搭載されている RDP クライアントプログラムに不満があるというのがあった。
ちょっと前までは、Windows 環境では標準搭載されている RDP クライアントプログラムを使っていた。Windows に対してのRDP接続では自動的にクライアントとRDP接続先が、画面の解像度やスケーリング情報をやり取りしていたため 問題なしとしていたし、 RDP 接続先としての Linux 環境側も X11 の設定を使い、手動で解像度を変えることで対応していて、それでいったん良しとしていた。
しかし、Linux 環境に RDP 接続する場合において、GNOME 49 の本格的な X11 環境が廃止があり、簡単に画面の解像度を変更できなくなったため、そうとは行かなくなった。
それで、私の環境でも NVIDIA 製 GPU を使っていても、Wayland にしないと、更新後 gdm サービスが立ち上がらないということになってしまったため、NVIDIA が提供する X11 上で動作する設定画面が使えなくなった。EDID という、ディスプレイの情報をローレベルで強引に書き換えるなどしなければ、自由な解像度で RDP 接続先としての Linux 環境が使えなくなってしまった。
こうして、いろんな我慢が積み重なり、そろそろいい加減何とかしようと思って、 Guacamole を見つけ、試していたというのがあった。私の今の理解だと、Guacamole とは、apache から出ている Tomcat 上で動作し、ブラウザでアクセスすることで使うことができる RDP VNC その他もろもろのクライアントとして使うことができる Web アプリという認識である。
とりあえず現状ではすべてについて記録を一気にとるのは現実的ではなかったので、とりあえず、書きやすいところや、記録に残しておきたいところを優先的に先に記録を残してみることにした。
Guacamoleが動作している様子
ログイン画面
接続先選択画面
動いている様子
設定方法
ここはまだ、というかまだとりあえず動いただけで、安定的な稼働までには至っていないってのがある。
Systemd におけるサービス例 (/etc/systemd/system/guacd-custom.service)
guacd を root で実行するのは色々と好ましく無いと思われるので、存在する標準ユーザをUser=に指定する。私は現時点では、通常メインで使っている管理用ユーザを指定している。また動的ライブラリの問題に対応するために、Environment="LD_LIBRARY_PATH=/usr/local/lib"が必要である。
[Unit]
Description="Guacd backend for the Guacamole frontend on localhost:4822(TCP)."
# After=
[Service]
Type=simple
User=[userNameOnTheHost]
Environment="LD_LIBRARY_PATH=/usr/local/lib"
ExecStart=/usr/local/sbin/guacd -f
Restart=on-failure
[Install]
WantedBy=multi-user.target
コンフィグ周りについて
RDP接続設定の記述例 (/etc/guacamole/user-mapping.xml)
<user-mapping>
<authorize username="share" password="46494649">
<connection name="aRDPconnection">
<protocol>rdp</protocol>
<param name="hostname">192.168.x.x</param>
<param name="port">3389</param>
<param name="username">[ユーザ名]</param>
<param name="password">[パスワード]</param>
<param name="ignore-cert">true</param>
</connection>
<connection name="aVNCconnection">
<protocol>vnc</protocol>
<param name="hostname">192.168.x.x</param>
<param name="port">5900</param>
<param name="username">[ユーザ名]</param>
<param name="password">[パスワード]</param>
<param name="ignore-cert">true</param>
</connection>
</authorize>
</user-mapping>
tomcat9 で動作する Guacamole フロントエンドの設定 (/etc/guacamole/guacamole.properties)
- guacd バックエンド接続先
- ユーザ認証方式についての指定
guacd-hostname: localhost
guacd-port: 4822
lib-directory: /etc/guacamole/extensions
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
user-mapping: /etc/guacamole/user-mapping.xml
気づいたことや躓いたこと
接続先の設定が一つしかないとき
自然に設定された接続先が一つしか存在しない場合、XMLでコンフィグ設置をする方法では、ログイン後直接自動的に接続され、選択画面は表示されなかった。
どんなアプリなのか勘違いしていた
最初は、なんかRDPとかを完全に置き換えるようなバックエンドも包括した Web ベースの何かかと思ったが、実際には画面を共有するために実際に画面をキャプチャしたり、接続先の制御をおこなうバックエンドは RDP VNC SSH などのメジャーなものが対応し、GNOME内臓の RDP バックエンドなどを使うことが分かった。
いろいろ試しているうちに、Guacamole はあくまで Web ベースのリモートデスクトップ、リモートシェルのクライアントであることが分かった。
guacd が必要な動的ライブラリを読み込めていない
なんか少なくとも私の Linux 環境では、ライブラリの標準の読み込みパスと、guacd が読み込むことを想定している動的ライブラリの配置場所が違うことが、エラーメッセージをたどったりしてたどり着いた、Apache Guacamole でVNCつないでみたの #guacamole - Qiita という記事を読んでわかり、実際に動かすところまで持っていくことができた。
具体的には、LD_LIBRARY_PATH の環境変数として、Guacamole のバックエンドが必要とするライブラリが実際に存在するパスを指定しないといけないようである。以下の動的ライブラリが読み込めない場合、RDP に接続できなかったりする。
ls /usr/local/lib/libguac-client*
# -rw-r--r--⠀root⠀5339894⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.a
# -rwxr-xr-x⠀root⠀1170 ⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.la*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so.0*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so.0.0.0*
# -rw-r--r--⠀root⠀641330 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.a
# -rwxr-xr-x⠀root⠀1245 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.la*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so.0*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so.0.0.0*
# -rw-r--r--⠀root⠀860494 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.a
# -rwxr-xr-x⠀root⠀1152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.la*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so.0*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so.0.0.0*
私の環境の場合は、/usr/local/lib/配下に必要なライブラリが配置されていたので、以下のようにしてみたところ、直接起動としてはとりあえず動いた。
LD_LIBRARY_PATH=/usr/local/lib
/usr/local/sbin/guacd -f -b 127.0.0.1 -l 4822 -L debug
# guacd[87930]: INFO: Guacamole proxy daemon (guacd) version 1.6.0 started
# guacd[87930]: DEBUG: Successfully bound AF_INET socket to host 127.0.0.1, port 4822
# guacd[87930]: INFO: Listening on host 127.0.0.1, port 4822
# guacd[87930]: INFO: Creating new client for protocol "rdp"
# guacd[87930]: INFO: Connection ID is "$7cd3298c-b86f-4162-9f81-c0d38c6a1ad8"
# guacd[87988]: DEBUG: Processing instruction: size
# guacd[87988]: DEBUG: Processing instruction: audio
# guacd[87988]: DEBUG: Processing instruction: video
# guacd[87988]: DEBUG: Processing instruction: image
# guacd[87988]: DEBUG: Processing instruction: timezone
# guacd[87988]: DEBUG: Processing instruction: name
# guacd[87988]: DEBUG: Parameter "console" omitted. Using default value of 0.
./configure 時の様子
RDP サポートが RDP ........... yes になっている。
./configure --with-systemd-dir=/usr/local/lib/systemd/system
# ...
#
# ------------------------------------------------
# guacamole-server version 1.6.0
# ------------------------------------------------
#
# Library status:
#
# freerdp ............. yes (2.x)
# pango ............... yes
# libavcodec .......... yes
# libavformat ......... yes
# libavutil ........... yes
# libssh2 ............. yes
# libssl .............. yes
# libswscale .......... yes
# libtelnet ........... no
# libVNCServer ........ yes
# libvorbis ........... yes
# libpulse ............ yes
# libwebsockets ....... no
# libwebp ............. yes
# wsock32 ............. no
#
# Protocol support:
#
# Kubernetes .... no
# RDP ........... yes
# SSH ........... yes
# Telnet ........ no
# VNC ........... yes
#
# Services / tools:
#
# guacd ...... yes
# guacenc .... yes
# guaclog .... yes
#
# FreeRDP plugins: /usr/lib/freerdp2
# Init scripts: no
# Systemd units: /usr/local/lib/systemd/system
make install 時の様子
/usr/local/lib にライブラリが配置されていると言われる。
sudo make install
# ...
# ----------------------------------------------------------------------
# Libraries have been installed in:
# /usr/local/lib
#
# If you ever happen to want to link against installed libraries
# in a given directory, LIBDIR, you must either use libtool, and
# specify the full pathname of the library, or use the '-LLIBDIR'
# flag during linking and do at least one of the following:
# - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
# during execution
# - add LIBDIR to the 'LD_RUN_PATH' environment variable
# during linking
# - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
# - have your system administrator add LIBDIR to '/etc/ld.so.conf'
#
# See any operating system documentation about shared libraries for
# more information, such as the ld(1) and ld.so(8) manual pages.
# --------------------------------------------------------------------
# ...
何も設定なしに、guacd を直接起動し、RDP接続を試す様子
ライブラリが欠損しているというエラーが直接出るのではなく、単にサポートされていませんと言われて、接続が失敗する。
/usr/local/sbin/guacd -f -b 127.0.0.1 -l 4822
# guacd[67624]: INFO: Guacamole proxy daemon (guacd) version 1.6.0 started
# guacd[67624]: INFO: Listening on host 127.0.0.1, port 4822
# guacd[67624]: INFO: Creating new client for protocol "rdp"
# guacd[67624]: INFO: Connection ID is "$ffb6b3e5-ec2c-45af-b11e-5d4dcbd25f19"
# guacd[67627]: WARNING: Support for protocol "rdp" is not installed
# guacd[67624]: INFO: Connection "$ffb6b3e5-ec2c-45af-b11e-5d4dcbd25f19" removed.
# guacd[67624]: INFO: Creating new client for protocol "rdp"
# guacd[67624]: INFO: Connection ID is "$78959ca6-d616-4193-814d-19bb046a109b"
# guacd[67633]: WARNING: Support for protocol "rdp" is not installed
# guacd[67624]: INFO: Connection "$78959ca6-d616-4193-814d-19bb046a109b" removed.
...
AUR に guacd っぽいものがあるが。。。
AUR に guacamole-server という名前で、guacd らしきものが存在しているが、これは正常にインストールできなかった。具体的には以下のコンパイルエラーが出てこけてしまう。
guacamole 公式からソースコードをダウンロードしてきて、コンパイルする分にはエラーにならなかったので、多分 AUR にあるそのリポジトリ自体の何かがおかしいのだろうとは思うが、とりあえず動かないということでこのことについては置いている。
CCLD libguac.la
In function 'inet_pton',
inlined from '__guac_wol_send_packet' at wol.c:104:18,
inlined from 'guac_wol_wake' at wol.c:192:22:
/usr/include/bits/inet-fortified.h:56:10: error: call to '__inet_pton_chk_warn' declared with attribute warning: inet_pton called with a destination buffer size too small [-Werror=attribute-warning]
56 | return __glibc_fortify (inet_pton, __sz, sizeof (char),
| ^
lto1: all warnings being treated as errors
make[4]: *** [/tmp/ccVyGcaM.mk:4: /tmp/ccuZSjG4.ltrans1.ltrans.o] Error 1
make[4]: *** Waiting for unfinished jobs....
lto-wrapper: fatal error: make returned 2 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:728: libguac.la] エラー 1
make[3]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0/src/libguac' から出ます
make[2]: *** [Makefile:1214: all-recursive] エラー 1
make[2]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0/src/libguac' から出ます
make[1]: *** [Makefile:551: all-recursive] エラー 1
make[1]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0' から出ます
make: *** [Makefile:471: all] エラー 2
==> エラー: build() で問題が発生しました。
中止...
-> ビルド時にエラー: guacamole-server-exit status 4
...
-> Failed to install the following packages. Manual intervention is required:
guacamole-server - exit status 4
細かいクライアント設定
私の環境では、Alt + Ctrl + Shift キーの同時押して以下の画面が出てきた。
Tomcat と JAVA バージョン
guacd が正しく動作せず、コンパイルが通らない (2026/4/1)
問題の説明と導入
久しぶりに、Guacamole の放置していたことをなんとかしようと思ったところ、guacd のバックエンドにおいて新たな問題が発生し、前動いてたやり方で動かないということに直面したため、それについて起こったことややったことを記録する。
具体的には、guacd-が必要な動的ライブラリを読み込めていないの動的ライブラリを探索するパスをあらかじめ明示する手順を踏んでもSupport for protocol "rdp" is not installedと言われて動かなかったり、guacdのバックエンド自体が良くないのかなと思い、Apache Guacamole® 公式からソースコードをダウンロードしてguacdを新たにコンパイルしようとすると以下のようなエラーに見舞われたりして、にっちもさっちも行かなくなったということがある。
コンパイルの様子
wget https://apache.org/dyn/closer.lua/guacamole/1.6.0/source/guacamole-server-1.6.0.tar.gz?action=download -O guacamole-server-1.6.0.tar.gz
ls
# -rw-r--r--⠀userName⠀1252749⠀Jun 20 06:50:32⠀⠀guacamole-server-1.6.0.tar.gz
tar xfv guacamole-server-1.6.0.tar.gz
cd guacamole-server-1.6.0
ls
# -rw-r--r--⠀userName ⠀Jun 20 06:46:07⠀⠀aclocal.m4
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀bin/
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀build-aux/
# -rw-r--r--⠀userName ⠀Jun 20 06:46:08⠀⠀config.h.in
# -rwxr-xr-x⠀userName 20 06:46:08⠀⠀configure*
# -rw-r--r--⠀userName ⠀Jun 17 07:52:47⠀⠀configure.ac
# -rw-r--r--⠀userName ⠀May 11 13:21:40⠀⠀CONTRIBUTING
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀doc/
# -rw-r--r--⠀userName ⠀Jun 17 07:52:47⠀⠀Dockerfile
# -rw-r--r--⠀userName ⠀May 11 13:21:40⠀⠀LICENSE
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀m4/
# -rw-r--r--⠀userName ⠀Dec 6 13:04:36⠀⠀Makefile.am
# -rw-r--r--⠀userName ⠀Jun 20 06:46:08⠀⠀Makefile.in
# -rw-r--r--⠀userName ⠀May 11 13:21:40⠀⠀NOTICE
# -rw-r--r--⠀userName ⠀Dec 4 12:58:44⠀⠀README
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀src/
# drwxr-xr-x⠀userName ⠀Jun 20 06:48:29⠀⠀util/
./configure
# ...
# configure: WARNING:
# --------------------------------------------
# Unable to find libwebsockets.
# Support for Kubernetes will be disabled.
# --------------------------------------------
# ...
# ------------------------------------------------
# guacamole-server version 1.6.0
# ------------------------------------------------
#
# Library status:
#
# freerdp ............. yes (2.x)
# pango ............... yes
# libavcodec .......... yes
# libavformat ......... yes
# libavutil ........... yes
# libssh2 ............. yes
# libssl .............. yes
# libswscale .......... yes
# libtelnet ........... no
# libVNCServer ........ yes
# libvorbis ........... yes
# libpulse ............ yes
# libwebsockets ....... no
# libwebp ............. yes
# wsock32 ............. no
#
# Protocol support:
#
# Kubernetes .... no
# RDP ........... yes
# SSH ........... yes
# Telnet ........ no
# VNC ........... yes
#
# Services / tools:
#
# guacd ...... yes
# guacenc .... yes
# guaclog .... yes
#
# FreeRDP plugins: /usr/lib/freerdp2
# Init scripts: no
# Systemd units: no
#
# Type "make" to compile guacamole-server.
#
make
# make all-recursive
# make[1]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0' に入ります
# Making all in src/libguac
# make[2]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' に入ります
# Making all in .
# make[3]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' に入ります
# CC libguac_la-argv.lo
# CC libguac_la-audio.lo
# In file included from raw_encoder.h:23,
# from audio.c:28:
# ../../config.h:290:9: error: '_XOPEN_SOURCE' redefined [-Werror]
# 290 | #define _XOPEN_SOURCE 700
# | ^~~~~~~~~~~~~
# In file included from /usr/include/unistd.h:25,
# from guacamole/socket-fntypes.h:31,
# from guacamole/socket.h:31,
# from guacamole/client-fntypes.h:33,
# from guacamole/client.h:29,
# from audio.c:24:
# /usr/include/features.h:234:10: note: this is the location of the previous definition
# 234 | # define _XOPEN_SOURCE 800
# | ^~~~~~~~~~~~~
# cc1: all warnings being treated as errors
# make[3]: *** [Makefile:824: libguac_la-audio.lo] エラー 1
# make[3]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' から出ます
# make[2]: *** [Makefile:1214: all-recursive] エラー 1
# make[2]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' から出ます
# make[1]: *** [Makefile:551: all-recursive] エラー 1
# make[1]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0' から出ます
# make: *** [Makefile:471: all] エラー 2
今回試したこと
今回試したことには、以下の項目がある。最終的に強硬コンパイル案が動く結果となった。
- guacamole/guacd - Docker Image の docker コンテナを
-p 4822:4822で localhost に露出した状態でguacdのバックエンドとして使うことを試した。(Google Gemini Fast 3の提案) guacdにおいて、コンパイルの警告などは抑圧して無視し、とにかく押し通す。(Google Gemini Fast 3の提案)
guacamole/guacd - Docker Imageの docker イメージを使う案では、最新のイメージでは、事前に環境構築された物を使っているはずにもかかわらず、動的ライブラリの配置がおかしく ちなみに、docker コンテナ版詳細な説明
Support for protocol "rdp" is not installedと出てきて、正しい動的ライブラリをLD_LIBRARY_PATH=/opt/guacamole/libとして明示するまで正しく動作しなかった。具体的には以下のようにして、guacdを再起動するような形態を取って無理やり動かした。# ログを出したいだけなら、guacamole/guacd を起動したあと、一旦 guacd を kill して一定時間ポートが利用可能になるまで待ち、guacd がバックグランドで実行されないよう -f を指定することで実現できる。
# docker ps
# docker exec [コンテナID] pkill guacd; sleep 20; guacd -f
# これはコンテナが即座に終了してしまい、うまく動かない
# docker ps
# docker exec -it [コンテナID] sh -c "pkill guacd; sleep 20; env LD_LIBRARY_PATH=/opt/guacamole/lib guacd -f -L debug"
# 以下は "pkill guacd; sleep 20; env LD_LIBRARY_PATH=/opt/guacamole/lib guacd -f -L debug" を参考として Gemini fast 3 にコマンドを吐かせた例。
docker run -it --rm \
-e LD_LIBRARY_PATH=/opt/guacamole/lib \
guacamole/guacd:1.6.0 \
/bin/sh -c "/opt/guacamole/sbin/guacd -f -L debug"
guacdバックエンドはどうあがいても動きそうで動かないって感じで、どんなセキュリティタイプを試しても、RDP server closed/refused connection: Server refused connection (wrong security type?)と言われ結局今回は動かなかった。バージョンを 1.5.x をランダムに試しても似たような症状が見受けられ、古いバージョンと新しいバージョンの違いは、古いバージョンの docker guacd コンテナは動的ライブラリパスを細工しなくてもとりあえず Support for protocol "rdp" is not installed と言われずにその点については動くということでしかなかった。docker ps
docker exec [コンテナID] pkill guacd; sleep 20; guacd -f
# guacd[1]: INFO: Creating new client for protocol "rdp"
# guacd[1]: INFO: Connection ID is "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d"
# guacd[3934]: INFO: Security mode: TLS
# guacd[3934]: INFO: Resize method: none
# guacd[3934]: INFO: No clipboard line-ending normalization specified. Defaulting to preserving the format of all line endings.
# guacd[3934]: INFO: User "@d7a9fe67-cff0-4429-ae09-a62465e910c3" joined connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" (1 users now present)
# guacd[3934]: INFO: Local system reports 32 processor(s) are available.
# guacd[3934]: INFO: Graphical updates will be encoded using 32 worker thread(s).
# guacd[3934]: INFO: Loading keymap "base"
# guacd[3934]: INFO: Loading keymap "en-us-qwerty"
# guacd[3934]: INFO: RDP server closed/refused connection: Server refused connection (wrong security type?)
# guacd[3934]: INFO: User "@d7a9fe67-cff0-4429-ae09-a62465e910c3" disconnected (0 users remain)
# guacd[3934]: INFO: Last user of connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" disconnected
# guacd[1]: INFO: Connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" removed.
試したことや説明
前提として以下のパッケージを明示的にインストールする。
yay -S openssl-1.1 freerdp2
はっきりとこれらのパッケージが今回の問題の原因かわかっていないが、いくつか心当たりがある点がある。
心当たりがある点の説明
openssl-1.1についてはこの記事を書いた初期においては、消していなかったが、つい最近アップグレード事にコンパイルに時間がかかっていて、邪魔そうだったからアップグレード時に片付けとして消したということがあった。それで、Google Gemini Fast 3 に色々今回の問題について具体的に何が起こっているか投げつけていると、Guacamole が新しい OpenSSL 3.0 を対応していないという説を出してきていて、確かに RDP では通信内容の暗号化関連で SSL 周りの問題は有り得そうなことから、インストールし直した経緯があった。freerdp2については、消したりインストールした自覚がないが、この記事を書き始めた当初においては、なにかのパッケージの依存関係として存在していた可能性があった。現在 AUR において、freerdp はメジャーバージョンが 3 以上になっている。(Arch Linux - freerdp 2:3.24.2-1 (x86_64)) この点についても、Google Gemini Fast 3 は Guacamole において互換性の問題があるとして、トラブルシュートの最中にインストールした。私的には、コンパイル時に共有されている/usr/include配下のパッケージマネージャによって管理されているであろう、ヘッダファイルがコンパイルエラーの理由として出てくるところも確かに、freerdp と Guacamole の相性問題が出ている事を示唆しているようにも見える。make
# ...
# ../../config.h:290:9: error: '_XOPEN_SOURCE' redefined [-Werror]
# 290 | #define _XOPEN_SOURCE 700
# | ^~~~~~~~~~~~~
# In file included from /usr/include/unistd.h:25,
# from guacamole/socket-fntypes.h:31,
# from guacamole/socket.h:31,
# from guacamole/client-fntypes.h:33,
# from guacamole/client.h:29,
# from audio.c:24:
# /usr/include/features.h:234:10: note: this is the location of the previous definition
# 234 | # define _XOPEN_SOURCE 800
# | ^~~~~~~~~~~~~
# ...
次に、コンパイルを行う。既に Guacamole-Server のソースコードについてダウンロードや展開を行い、展開されたフォルダ内に移動している事を想定する。
# 以下は Gemini Fast 3 の提案
export CPPFLAGS="-U_XOPEN_SOURCE -D_XOPEN_SOURCE=700"
./configure --with-rdp CFLAGS="-Wno-error"
make install
これで、再びguacd-が必要な動的ライブラリを読み込めていないの手順に従うと、動くことが確認できた。試行錯誤の過程で存在する動作に影響を与えるような重要なポイントについていくつか書き漏らしている気もするが、思い出せる範囲だとこんなところであった。
おまけ
おまけというか、せっかく自前のブログなので、自由にしたいというのもあり、私の主観で、自由に気持ちを吐き出すって感じで、ここから先は不満について書いています。人によっては気分を害したりするかもしれませんから、ここで一応注意書きはしておきます。
具体的な Microsoft の提供するRDP クライアントの不満
ネイティブクライアントについて
私がネイティブクライアントと呼んでいるのは、Windows XP 時代からあるような Win32 なプログラムのことについてである。MS Store にあるようなものではない。
私がこの RDP クライアントについて不満な点は以下の通りである。
RDP 接続先との解像度が合わないときのスケーリングが微妙
一応スケーリングできるが、決まった倍率にしかスケーリングできず、使っているクライアントの画面の解像度次第では、全然サイズが合わない。しかも解像度が合わないときの挙動が、なんか最初から全画面表示を指定したときと、後からRDP接続した後や一度全画面表示を解除した後に、ウィンドウを操作する方法して全画面表示にしようとしたときに、異なる挙動となっているところも不満点かもしれない。
-
何もスケーリングしていないとき
-
最初から全画面の指定にしたとき
-
あとから全画面表示にしようとしたとき
-
スケーリングが合わず小さすぎる例
-
スケーリングが合わず大きすぎる例
とにかく Windows 以外の接続先と相性が悪い
以下は、GNOME RDP 環境に接続しようとしてエラーが出ている様子であるが、ユーザ名やパスワードを間違えても、それ以外の何かしらの障害だったとしても、More data is available しか出てきたためしがない。GNOME デスクトップ自体が障害時に、うわっ、何かがおかしいみたいです!みたいなエラー文を全画面表示で出すように、具体的に何が問題なのか説明があまりに欠けていて、これだけではわからないということがある。
現状どうなっているかとか、ログをいろいろ怪しいところを漁るとか、すぐには解決を期待できない時間のかかる地獄のようなデバック作業になる。それは、今回説明するやつも同じといえばそうかもしれないが。。。
Windows でしか使えない
そもそも RDP エコスステム全体が MS の Windows のための産物って感じで、一応 RDP についての PDF のドキュメント があるけど暗号みたいなわかりづらいのしかないし、Androidとか、Linux環境とか、MACとかその他いろいろあるプラットフォームに対して優しくないという点がある。Linux 環境には、Remmina がありそれが使えるが、いちいち専用クライアントソフトを入れないと使えないというところがやはり手軽とはいいがたいところ。
RDP 的なものは、手軽に頻繁に使いたいものの一つなので、ブラウザ一つでアクセスして利用できるというのはありがたいと思う。
MS Store にある RDP アプリについて
ちょっと前の Win10 時代には、スケーリングも画面に合わせてできて、自前の環境に接続可能なモートデスクトップアプリが MS Store に存在していたが、今は少なくとも正攻法では利用不可能なようである。
今は、Windows App なる「絶対課金させるぞ!ベンダーロックインするぞ!」って気満々のアカウントログイン必須、サブスク前提のアプリに置き換えられており、MS のクラウドを意地でも強引に使わせようと躍起になっているところがうかがえ、私にとっては最悪である。
多分ターゲットは iPhoneを使っているとかモバイルな世界で、公式ストアにある審査に通ったアプリしか使いませんという、浅く使いお金は落とすが、その行動が将来的にどうなるか影響については考えられておらず、言われるがままに正しいとされる存在に従い、技術的にやられてしまったらそのことも分からないような以下に示すような人たちであると思われる。
- 過労など、強烈な苦しみに毎日さいなまれているなど、考えられないような状況下にある
- 自分の本意と他人の意図の区別がついていないなど何かしら自覚のない状態であり、従っていることのないように疑問を持つ習慣がない
- 自分の本意が分かっていない、自分が分からない人
- 自らの意図したとおりに物事が進んでいない、最終的に到達されていないが、それに自覚がない人
私としては、どうしてもこういうやりかたは、搾取や弱いものいじめっていう印象を受ける。
ちなみにちょっと前評価を見たときにはコメントがあって、「前のリモートデスクトップアプリから移行しろと指示があったので移行したところ、ログインしないと使えない仕様だった。最悪!」みたいなコメントにあふれていた。今(2025/10/25)、そのコメントについて確認しようとしたところ、NX domain となり、MS Store サイト自体が吹き飛んでいてカオスな予感だった。なんか今まで見聞きした中で感じることとしては、 Win Vista 時代の Windows Live っぽい雰囲気である。
結局単に RDP アプリとして見るならば、旧来のオプションを強制的に封じて、商業的、政治的な理由を社会的大義の建前やあたりさわりの良いマーケティングの言葉で包む(新しいことを強調する、”完全なセキュリティー”などと言い現実的ではない理想を実現したかのように謳う)をして新規ユーザを既存のブランドと相まって説得し強引に取り込もうとしながら、昔から使っていたユーザーには反感を買うようなことをするのは結構マイナスなことであると思われるが、MS的にはそれはどうでもいいのだろうとも思える。
私としては、新しいものを出すのはいいが、旧来のものを使い続けることを否定し、新しいものを強制されるのはいただけないと思うところである。もちろん現状では、MS Store ではなく、Windows 標準で入っている RDP クライアントに関しては、利用可能だし、暫定的な利用としては機能は使えるほどにはある。しかし、知ってる人は知っているが、知らない人は知らないって感じな気がして、これから初めましての人にとってはあってないような選択肢だと思われる。
まあ、Internet explorer の話といい、Windows 10 強制アップグレードの話といい、これからも Microsoft は同じことを繰り返すのだろうとは思う。また、EUがその時には登場するのだろうか。。。
参考にしたサイトとか
-
Welcome! - The Apache HTTP Server Project
https://httpd.apache.org/ (2025年10月30日) -
Apache Tomcat® - Welcome!
https://tomcat.apache.org/ (2025年10月30日) -
Apache Guacamole でVNCつないでみたの #guacamole - Qiita
https://qiita.com/sandopan65/items/b7beecfe70c79e354371 (2025年10月30日) -
Configuring Guacamole — Apache Guacamole Manual v1.6.0
https://guacamole.apache.org/doc/gug/configuring-guacamole.html (2025年10月30日) -
AUR (en) - guacamole-server
https://aur.archlinux.org/packages/guacamole-server (2025年10月30日) -
How to change Java version used by TOMCAT? - Stack Overflow
https://stackoverflow.com/questions/4072260/how-to-change-java-version-used-by-tomcat (2025年10月30日) -
Chapter 3. Configuring Guacamole
https://guacamole.apache.org/doc/0.9.1/gug/configuring-guacamole.html (2025年10月30日) -
Installing Guacamole natively — Apache Guacamole Manual v1.6.0
https://guacamole.apache.org/doc/gug/guacamole-native.html (2025年10月30日) -
Guacamole’s user interface — Apache Guacamole Manual v1.6.0
https://guacamole.apache.org/doc/gug/using-guacamole.html (2025年10月30日) -
Installing Guacamole with Docker — Apache Guacamole Manual v1.6.0
https://guacamole.apache.org/doc/gug/guacamole-docker.html (2025年10月30日) -
Apache Guacamole®: 1.6.0
https://guacamole.apache.org/releases/1.6.0/ (2025年10月30日) -
Apache Guacamole®
https://guacamole.apache.org/ (2025年10月30日) -
How to change Apache Tomcat web server port number - Stack Overflow
https://stackoverflow.com/questions/18415578/how-to-change-apache-tomcat-web-server-port-number (2025年10月30日) -
Apache Tomcat 9 Configuration Reference (9.0.111) - The HTTP Connector
https://tomcat.apache.org/tomcat-9.0-doc/config/http.html (2025年10月30日) -
Tomcat の初期設定まとめ #JavaEE - Qiita
https://qiita.com/hidekatsu-izuno/items/ab604b6c764b5b5a86ed (2025年10月30日) -
Apache Tomcat 9 Configuration Reference (9.0.111) - Container Provided Filters
https://tomcat.apache.org/tomcat-9.0-doc/config/filter.html (2025年10月30日) -
Apache Tomcat 9 Configuration Reference (9.0.111) - Overview
https://tomcat.apache.org/tomcat-9.0-doc/config/index.html (2025年10月30日) -
Implementation and architecture — Apache Guacamole Manual v1.6.0
https://guacamole.apache.org/doc/gug/guacamole-architecture.html (2025年10月30日) -
Guacamole shows error: Support for protocol RDP is not installed - Support - NethServer Community
https://community.nethserver.org/t/guacamole-shows-error-support-for-protocol-rdp-is-not-installed/15526/4 (2025年10月30日) -
[MS-RDSOD]: Remote Desktop Services Protocols Overview | Microsoft Learn
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rdsod/072543f9-4bd4-4dc6-ab97-9a04bf9d2c6a (2025年10月30日) -
Microsoft down? Current problems and outages | Downdetector
https://downdetector.com/status/microsoft/ (2025年10月30日) -
MS Store
https://apps.microsoft.com/ (2025年10月30日) -
Microsoft’s Greatest Flop - YouTube
https://www.youtube.com/watch?v=12LDsYpbLO4 (2025年10月30日) -
Google Gemini
https://gemini.google.com/app (2026年4月1日) -
guacamole/guacd - Docker Image
https://hub.docker.com/r/guacamole/guacd (2026年4月1日) -
Chapter 3. Configuring Guacamole
https://guacamole.apache.org/doc/0.9.6/gug/configuring-guacamole.html (2026年4月1日) -
AUR (en) - guacamole-server
https://aur.archlinux.org/packages/guacamole-server (2026年4月1日) -
AUR (en) - guacamole-client
https://aur.archlinux.org/packages/guacamole-client (2026年4月1日) -
Tomcat - ArchWiki
https://wiki.archlinux.org/title/Tomcat (2026年4月1日) -
GNOME remote desktop RDP problem with Apache Guacamole - Desktop - GNOME Discourse
https://discourse.gnome.org/t/gnome-remote-desktop-rdp-problem-with-apache-guacamole/20703 (2026年4月1日) -
Apache Guacamole server. RDP server closed/refused connection: Server refused connection (wrong security type?) - Stack Overflow
https://stackoverflow.com/questions/78455945/apache-guacamole-server-rdp-server-closed-refused-connection-server-refused-co (2026年4月1日) -
Install Guacamole on Debian 11 - kifarunix.com
https://kifarunix.com/install-guacamole-on-debian-11/#fix-rdp-security-negotiation-failed (2026年4月1日) -
AUR (en) - freerdp2
https://aur.archlinux.org/packages/freerdp2 (2026年4月2日) -
AUR (en) - openssl-1.1
https://aur.archlinux.org/packages/openssl-1.1 (2026年4月2日) -
Arch Linux - openssl 3.6.1-1 (x86_64)
https://archlinux.org/packages/core/x86_64/openssl/ (2026年4月2日) -
Arch Linux - freerdp 2:3.24.2-1 (x86_64)
https://archlinux.org/packages/extra/x86_64/freerdp/ (2026年4月2日)