「設定 - KVMのGPUパススルー」の版間の差分

ナビゲーションに移動 検索に移動
741行目: 741行目:


== SynergyまたはBarrierのインストール ==
== SynergyまたはBarrierのインストール ==
Windows10のインストール完了後、[https://symless.com/synergy Synergy(有償ソフトウェア)]または[https://github.com/debauchee/barrier/releases Barrier]をインストールできる。<br>
ゲストOSのインストールが完了した後、[https://symless.com/synergy Synergy(有償ソフトウェア)]または[https://github.com/debauchee/barrier/releases Barrier]をインストールすることを推奨する。<br>
これらは、物理的なKVM(Keyboard-Video-Mouse)スイッチなしで、複数のPCで同じキーボードとマウスを使用できる。<br>
これらは、物理的なKVM (Keyboard-Video-Mouse) スイッチなしで、複数のPCで同じキーボードとマウスを使用できる。<br>
<br>
<br>
以下に、SynergyとBarrierのインストール手順を記載する。<br>
SynergyおよびBarrierの概要およびインストール手順を知りたい場合は、[[インストール - マウス・キーボード共有ソフトウェア]]のページを参照すること。<br>
<br>
==== Synergy ====
Synergyは有償ソフトウェアであるが、一部の機能(通信の暗号化機能)を除いて、無償でも使用することができる。<br>
<br>
===== パッケージ管理システムからインストール (非推奨) =====
Synergyのバージョンが古い場合があるため、非推奨である。<br>
sudo zypper install libdns_sd qsynergy synergy
<br>
===== ソースコードからインストール =====
まず、Synergyのビルドに必要な依存関係のライブラリをインストールする。<br>
# RHEL
sudo dnf groupinstall "Development Tools"
sudo dnf install epel-release cmake3 boost-static libcurl-devel openssl-devel libXtst-devel \
                 
                  # Qt 5を使用する場合
                  qt5-qtbase-devel qt5-qtdeclarative-devel
                  # Qt 6を使用する場合
                  qt6-qtbase-devel qt6-core-devel qt6-widgets-devel qt6-network-devel qt6-dbus-devel qt6-qtdeclarative-devel
# SUSE
sudo zypper install glib2-devel gdk-pixbuf-devel avahi-compat-mDNSResponder-devel dbus-1-devel libcurl-devel libnotify-devel  \
                    libopenssl-devel libopenssl-1_1-devel libavahi-devel fixesproto-devel libportal-devel pugixml-devel      \
                    libXrandr-devel libXext-devel libXfixes-devel libXinerama-devel libXi-devel libXtst-devel xextproto-devel \
                    libxkbcommon-devel libxkbfile-devel inputproto-devel recordproto-devel libSM-devel                        \
                    # Qt 5を使用する場合
                    libqt5-qtbase-common-devel libQt5Core-devel libQt5Gui-devel libQt5Widgets-devel libQt5Network-devel      \
                    libQt5DBus-devel libqt5-linguist-devel
                    # Qt 6を使用する場合
                    qt6-base-devel qt6-core-devel qt6-widgets-devel qt6-network-devel qt6-dbus-devel qt6-linguist-devel
<br>
* 各バージョンのソースコードからインストールする場合
*: [https://github.com/symless/synergy-core/releases SynergyのGithub]からソースコードをダウンロードする。
*: ダウンロードしたファイルを解凍する。
*: <code>tar xf synergy-core-<バージョン>.tar.gz</code>
*: <code>cd synergy-core-<バージョン></code>
*: <br>
*: Synergyのビルドに必要なサブモジュールをダウンロードする。
*: <code>git clone https://github.com/mohabouje/WinToast ext/WinToast</code>
*: <code>git clone https://github.com/google/googletest.git ext/googletest</code>
*: <code>git clone https://github.com/zeux/pugixml ext/pugixml</code>
*: <br>
*: Synergyをビルドおよびインストールする。
*: <code>mkdir build && cd build</code>
*: <code>cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<Synergyのインストールディレクトリ> ..</code>
*: <code>make -j $(nproc) または cmake --build . -j $(nproc)</code>
*: <code>make install または cmake --install .</code>
<br>
* <code>git clone</code>コマンドを使用する場合
*: <code>git clone https://github.com/symless/synergy-core.git</code>
*: <code>cd synergy-core</code>
*: 最新安定版 : <code>git checkout master</code>
*: 最新開発版 : <code>git checkout vX.Y.Z</code>
*: <br>
*: Synergyをビルドおよびインストールする。
*: <code>cd synergy-core && mkdir build && cd build</code>
*: <br>
*: <code>cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<Synergyのインストールディレクトリ> ..</code>
*: <code>make -j $(nproc) または cmake --build . -j $(nproc)</code>
*: <code>make install または cmake --install .</code>
<br>
Synergyの実行ファイルが存在するディレクトリに、以下のようなシェルスクリプトを作成する。<br>
vi /<Synergyの実行ファイルがあるディレクトリ>/bin/synergy.sh
<br>
<syntaxhighlight lang="sh">
# /<Synergyの実行ファイルがあるディレクトリ>/bin/synergy.shファイル
#!/usr/bin/env sh
appname="synergy"
# use -f to make the readlink path absolute
dirname="$(dirname -- "$(readlink -f -- "${0}")" )"
if [ "$dirname" = "." ]; then
    dirname="${PWD}/${dirname}"
fi
cd $dirname
# Initialize interpreter path
export PATH="$dirname:$PATH"
export LD_LIBRARY_PATH="$dirname/../lib64:${LD_LIBRARY_PATH}"
# Run Synergy binary
"${dirname}/${appname}" "$@"
</syntaxhighlight>
<br>
Windowsの場合は、Githubにあるインストーラをダウンロードしてインストールする。<br>
インストールした後、Synergyの設定を行う。<br>
<br>
===== Synergyのアンインストール =====
* Windowsの場合
*# [プログラムの追加と削除](または[アプリと機能])で、Synergyをアンインストールする。<br>この時、"アプリとその関連情報がアンインストールされます"というメッセージが表示されるので、再度、[アンインストール]ボタンを押下する。
*# [アプリを終了する必要があります]メッセージ、および、アプリを自動的に終了させるかどうかを尋ねられるので、これを選択する。
*# 次に、regeditを実行して、以下に示すレジストリキーを削除する。(存在する場合)
*#* HKEY_CURRENT_USER\Software\Symless
*#* HKEY_CURRENT_USER\Software\Synergy
*#* HKEY_LOCAL_MACHINE\SOFTWARE\Synergy
*#: <br>
*# 以下のディレクトリが存在する場合は、削除する。
*#* C:\ProgramData\Symless
*#* C:\ProgramData\Synergy
*#* C:\ProgramData\Synergy v2
*#* %USERPROFILE%\AppData\Local\Synergy
*#* %USERPROFILE%\AppData\Local\Symless
*#: <br>
*# 次に、SystemConfig.iniファイルを削除する。<br>この時、以前に保存した設定は失われる。
*#: C:\Program Files\Synergy\SystemConfig.ini
*#: <br>
*# 最後に、Windowsを再起動する。
*: <br>
* Linuxの場合
*# パッケージ管理システムを使用して、Synergyを削除する。
*# 次に、以下のコマンドを実行して、Synergyの設定を削除する。
*#* <code>rm -rf ~/.config/Symless/</code>
*#* <code>rm -rf ~/.config/Synergy/</code>
*#* <code>rm -rf ~/.synergy/</code>
*#* <code>rm -rf ~/.symless/</code>
*#: <br>
*# 次に、SystemConfig.iniファイルを削除する。<br>この時、以前に保存した設定は失われる。
*#: <code>sudo rm -rf /usr/local/etc/Symless/SystemConfig.ini</code>
<br>
 
==== Barrier (非推奨) ====
2021年以降、Barrierの開発は止まっているため、非推奨とする。<br>
<br>
===== パッケージ管理システムからインストール =====
まず、以下のコマンドを実行して、LinuxにBarrierをインストールする。<br>
sudo zypper install barrier
<br>
次に、[https://github.com/debauchee/barrier/releases BarrierのGiHub]にアクセスして、Windows向けのBarrierの実行ファイルをダウンロードしてインストールする。<br>
インストール後、Barrierの設定を行う。<br>
<br>
===== ソースコードからインストール =====
まず、Barrierをビルドするため、依存関係のライブラリをインストールする。<br>
# RHEL (EPELリポジトリの追加が必要)
sudo dnf groupinstall "Development Tools"
sudo dnf install 'dnf-command(config-manager)'
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install cmake3 libcurl-devel avahi-compat-libdns_sd-devel libX11-devel libXtst-devel desktop-file-utils openssl-devel \
                  qt5-qtbase-devel
# SUSE
sudo zypper install --type pattern devel_basis
sudo zypper install libdrm-devel libglvnd-devel libICE-devel \
                    libcurl-devel avahi-compat-mDNSResponder-devel libXtst-devel libopenssl-devel \
                    libSM-devel libXinerama-devel libXrandr-devel Mesa-devel \
                    libQt5Core-devel libQt5Gui-devel libQt5Network-devel libqt5-qtbase-common-devel libQt5Widgets-devel
<br>
次に、[https://github.com/debauchee/barrier/releases BarrierのGiHub]にアクセスして、Barrierのソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍して、ビルド向けディレクトリを作成する。<br>
# Tarballからビルドする場合
tar xf barrier-<バージョン>-release.tar.gz
cd barrier-<バージョン>-release && mkdir build && cd build
# Gitからビルドする場合
git clone https://github.com/debauchee/barrier.git barrier && cd barrier
git submodule update --init --recursive
./clean_build.sh
cd build
<br>
<u>※注意</u><br>
<u>Tarballをダウンロードした時、Barrierディレクトリのext/gmockディレクトリ、ext/gtestディレクトリ、ext/gulrak-filesystemディレクトリが空の場合、</u><br>
<u>以下のモジュールのソースコードをダウンロードする必要がある。</u><br>
# Tarballのモジュールをダウンロードする場合
wget https://github.com/google/googletest/archive/refs/tags/release-<バージョン>.tar.gz
wget https://github.com/gulrak/filesystem/archive/refs/tags/<バージョン>.tar.gz
tar xf googletest-release-<バージョン>.tar.gz
tar xf filesystem-<バージョン>.tar.gz
# Gitを使用してモジュールをダウンロードする場合
git clone https://github.com/google/googletest.git
git clone https://github.com/gulrak/filesystem
<br>
<u>Barrierのビルドに必要なソースコードを、Barrierディレクトリのext/gmockディレクトリ、ext/gtestディレクトリ、ext/gulrak-filesystemディレクトリにコピーする。</u><br>
# Tarballのモジュールをダウンロードした場合
cp -r googletest-release-<バージョン>/googlemock <Barrierディレクトリ>/ext/gmock
cp -r googletest-release-<バージョン>/googletest <Barrierディレクトリ>/ext/gtest
cp -r filesystem-<バージョン>/* <Barrierディレクトリ>/ext/gulrak-filesystem
# Gitを使用してモジュールをダウンロードした場合
cp -r googletest/googlemock/* <Barrierディレクトリ>/ext/gmock
cp -r googletest/googletest/* <Barrierディレクトリ>/ext/gtest
cp -r filesystem/* <Barrierディレクトリ>/ext/gulrak-filesystem
<br>
Barrierをビルドおよびインストールする。<br>
# Tarballからインストールする場合
cmake  -DCMAKE_INSTALL_PREFIX=${HOME}/InstallSoftware/Barrier -DCMAKE_BUILD_TYPE=Release ..
make -j $(nproc)
make install
# Gitからインストールする場合
make DESTDIR=${HOME}/InstallSoftware/Barrier install
<br>
Barrierの起動スクリプトを作成する。<br>
vi ~/InstallSoftware/Barrier/barrier.sh
<br>
<syntaxhighlight lang="sh">
# ~/InstallSoftware/Barrier/barrier.sh
#!/usr/bin/env sh
appname="barrier"
# use -f to make the readlink path absolute
dirname="$(dirname -- "$(readlink -f -- "${0}")" )"
if [ "$dirname" = "." ]; then
    dirname="${PWD}/${dirname}"
fi
cd ${dirname}
# Initialize interpreter path
export PATH="${dirname}:${PATH}"
export LD_LIBRARY_PATH="/<Qtのインストールディレクトリ>/<Qtのバージョン>/gcc_64/lib:${LD_LIBRARY_PATH}"
# Run Barrier binary
"${dirname}/${appname}" "$@"
</syntaxhighlight>
<br>
Barrierの起動スクリプトに実行権限を付加する。<br>
chmod u+x ~/InstallSoftware/Barrier/barrier.sh
<br>
Barrierの実行に必要な依存関係のパッケージをインストールする。<br>
sudo zypper install libdns_sd
<br>
Barrierのデスクトップエントリファイルを、~/.local/share/applicationsディレクトリに作成する。<br>
# ~/.local/share/applications/Barrier.desktop
[Desktop Entry]
Type=Application
Name=Barrier <バージョン>
GenericName=Barrier
Comment=Keyboard and mouse sharing solution
Exec=/home/<ユーザ名>/InstallSoftware/Barrier/bin/barrier.sh
Icon=/home/<ユーザ名>/InstallSoftware/Barrier/barrier
Terminal=false
Categories=Utility;
Keywords=keyboard;mouse;sharing;network;share;
<br>
次に、[https://github.com/debauchee/barrier/releases BarrierのGiHub]にアクセスして、Windows向けのBarrierの実行ファイルをダウンロードする。<br>
KVMのゲストOSであるWindowsに、Barrierをインストールする。<br>
<br>
Barrierのインストール完了後、Barrierの設定を行う。<br>
<br>
Windowsにおいて、Barrierを自動起動する場合は以下の手順を行う。<br>
# まず、[スタート]ボタンを押下して、起動時に実行するソフトウェアを右クリックする。
# コンテキストメニューから[その他] - [ファイルの場所を開く]を選択して、ソフトウェアのショートカットが保存されているディレクトリを開く。<br>もし、[ファイルの場所を開く]オプションが表示されない場合、そのソフトウェアは起動時に実行できないことを意味する。
# 次に、[Super]キー + [R]キーを同時押下して、<code>shell:startup</code>と入力、[OK]ボタンを押下する。
# [スタートアップ]ディレクトリが開くので、ソフトウェアのショートカットが保存されているディレクトリから、ショートカットを[スタートアップ]ディレクトリにコピーする。
<br>
===== Waylandの場合 =====
Barrierは、Wayland上でにおいてはグラフィカルで起動することができない。<br>
そのため、自動起動する場合は、コンソールまたはSystemdサービスユニットを作成して実行する必要がある。<br>
<br>
コンソールから通常起動する場合、以下に示すコマンドを実行する。<br>
# ゲストOS側 (クライアント側)
barrierc --name <クライアントのスクリーン名>              \
          --display <ディスプレイ番号>                  \
          -f <サーバのIPアドレスまたはホスト名>:<ポート番号> \
          --disable-crypto --daemon
<br>
コンソールから自動起動する場合は、~/.config/autostart/Barrier.desktopファイルを以下に示す内容で作成する。<br>
<syntaxhighlight lang="ini">
# ~/.config/autostart/Barrier.desktopファイル
[Desktop Entry]
Type=Application
Name=StartBarrier
Exec=bash -c 'barrierc --name <クライアントのスクリーン名> --display <ディスプレイ番号> -f <サーバのIPアドレスまたはホスト名>:<ポート番号> --disable-crypto --daemon
Icon=dialog-scripts
</syntaxhighlight>
<br>
Systemdサービスユニットとして起動する場合、/etc/systemd/system/barrier.serviceファイルを以下に示す内容で作成する。<br>
これは、X11が:0にあると仮定している。<br>
<br>
SystemdサービスユニットではマルチユーザでBarrierが使用できないため、ユーザサービスを使用する。<br>
<br>
<u>※注意</u><br>
<u>Systemdサービスユニットとして、スーパーユーザでBarrierを実行することによりセキュリティ上の懸念が存在する。</u><br>
<u>ログに記録する前にBarrierを使用する必要がある場合(DMで使用する場合)は、この方法が唯一の選択肢である。</u><br>
<u>ログイン画面でBarrierを使用する必要が無い場合は、デスクトップエントリファイルを作成して自動起動することを推奨する。</u><br>
<br>
<syntaxhighlight lang="ini">
# /etc/systemd/system/barrier.serviceファイル
[Unit]
Description=Barrier Client daemon
After=network.target
[Service]
User=<ユーザ名>
Group=<グループ名>
ExecStart=barrierc --name <クライアントのスクリーン名> --display <ディスプレイ番号> -f <サーバのIPアドレスまたはホスト名>:<ポート番号> --disable-crypto --debug INFO
Restart=always
[Install]
WantedBy=multi-user.target
</syntaxhighlight>
<br>
 
===== Barrierのアンインストール =====
* Windows
*# Barrierをアンインストールする前に、Barrierを終了する。<br><u>Barrierを起動したままでアンインストールした場合、ほとんどのBarrierに関するファイルが残ってしまうため注意すること。</u>
*# Barrierのサービスを停止するため、管理者権限でPowershellまたはコマンドプロンプトを起動して、<code>net stop</code>コマンドを実行する。<br>これは、<code>sc stop</code>コマンドでは非同期で実行されるため、<code>sc delete</code>コマンドが失敗して、アンインストール後にbarrierd.exeが残るからである。
*# <code>net stop</code>コマンドを実行する。<br><code>net stop</code>コマンドは、Barrierのサービスが停止するまで同期で実行するため、<code>sc delete</code>コマンドが成功する。
*# [設定] - [アプリ]画面または[コントロールパネル] - [プログラムと機能]画面から、Barrierをアンインストールする。
*# 次に、C:\Program Files\BarrierフォルダおよびC:\ProgramData\Barrierフォルダを削除する。
*# C:\Users\<ユーザ名>\AppData\Local\Barrierディレクトリを削除する。
*# C:\Users\<ユーザ名>\AppData\Local\Tempディレクトリに存在する"Barrier."から始まるファイル群を削除する。
*# regeditを実行して、\HKEY_USERS\S-<Windows11の現在のビルド番号>\SOFTWARE\Debaucheeを削除する。
*# %LocalAppData%\Barrierフォルダ(レジストリ設定、Barrierの設定ファイル、証明書、フィンガープリント)を削除する。
*# 必要ならば、Barrierに関するファイヤーウォールのルールを削除する。
*: <br>
* Linux
*# まず、Barrierのインストールディレクトリを削除する。
*#: <code>rm -rf <Barrierのインストールディレクトリ></code>
*# 次に、Barrierの設定ファイルが存在するディレクトリを削除する。
*#: <code>rm -rf ~/.local/share/barrier</code>
*#: <code>rm -rf ~/.config/Debauchee</code>
<br>
 
==== ファイヤーウォールの設定 ====
ファイヤーウォールのポート開放を行う。<br>
sudo firewall-cmd --permanent --add-port=24800/tcp
または
sudo firewall-cmd --permanent --zone=libvirt --add-port=24800/tcp
sudo firewall-cmd --reload
<br>
SUSEの場合および上記のコマンドで接続できない場合は、以下の設定を行う。<br>
<br>
まず、/usr/lib/firewalld/services/barrier.xmlファイルを作成する。<br>
(このファイルは不要の可能性があることに注意すること)<br>
sudo vi /usr/lib/firewalld/services/barrier.xml
<br>
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8"?>
    <service>
    <short>Synergy</short>
    <description>Share a mouse and keyboard on KVM.</description>
    <port protocol="tcp" port="24800"/>
</service>
</syntaxhighlight>
<br>
次に、/usr/lib/firewalld/zones/libvirt.xmlファイルにおいて、<br>
<code></zone></code>タグの上部に<code><port port="24800" protocol="tcp"/></code>を追記する。<br>
sudo nano /usr/lib/firewalld/zones/libvirt.xml
<br>
<syntaxhighlight lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<zone target="ACCEPT">
    <!-- ...略 -->
    <port port="24800" protocol="tcp"/>
</zone>
</syntaxhighlight>
<br>
最後に、上記の設定を有効にするため、ファイアーウォールを再読み込みまたはPCを再起動する。<br>
または、PCを再起動する。<br>
sudo firewall-cmd --reload
sudo systemctl restart firewalld
または
sudo shutdown -r now
<br>
==== コンソールの使用 ====
# Barrier Client
barrierc --daemon --name <クライアントのスクリーン名> <サーバのIPアドレス>
# Barrier Server
barriers --daemon --address <クライアントのIPアドレス> --name <クライアントのスクリーン名> \
          --config <Barrierの設定ファイルのパス>
# Synergy Micro Client
# Wayland向け
waynergy --host <サーバIPアドレス> --name <クライアントのPC名> --logfile <ログファイルのパス>
<br><br>
<br><br>


案内メニュー