These are the instructions for people who want to test the latest version of Remmina (`master` branch) on RHEL-like operating systems.
Current version of this guide was tested on vanilla CentOS 7 GNOME Desktop (specifically: [CentOS-7-x86_64-DVD-1908.iso](http://tux.rainside.sk/centos/7.7.1908/isos/x86_64/)), CentOS 8 Workstation (specifically: [CentOS-8.1.1911-x86_64-dvd1.iso](http://tux.rainside.sk/centos/8.1.1911/isos/x86_64/)) and Fedora 31 x86_64 (specifically: [Fedora-Workstation-Live-x86_64-31-1.9.iso](https://download.fedoraproject.org/pub/fedora/linux/releases/31/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-31-1.9.iso)). However, it should work on all CentOS 7+, Red Hat 7+ and Fedora 20+ versions. If you find anything not working, raise an [issue](https://gitlab.com/Remmina/Remmina/issues/new).
Note that although on CentOS 8 and Fedora, they use `dnf` package manager, there is still the `yum` symlink to `dnf`, so we decided to keep `yum` in this guide to make it usable on all of these distributions without any modifications.
If you want to uninstall the program, follow the instructions in the step 0.
**0.** It is important that no other Remmina or FreeRDP version is installed, therefore we need to remove it.
```bash
# To check if a program is installed, we can use `whereis [program(s)]`
whereis freerdp remmina
# When FreeRDP is installed from the CentOS repo, use this command to remove it
sudo yum -y remove freerdp*
# When FreeRDP is installed from source code, enter the FreeRDP source code folder
# and run the following command
cd ${HOME}/freerdp
sudo rm $(cat install_manifest.txt)
# When Remmina is installed from the CentOS repo, use this command to remove it
sudo yum -y remove remmina*
# When Remmina is installed from source code, enter the `build` folder
# in Remmina source code folder and run the following command
cd ${HOME}/remmina/build
sudo make uninstall
# Finally, we need to delete the empty folders of Remmina and FreeRDP
# This needs to be run for uninstallation of either programs
sudo rmdir $(find $(whereis freerdp remmina | grep -Po "^[^:]*: \K.*$") -type d | tac)
```
**1.** Add necessary repos. Note that on CentOS 7 GNOME Desktop only `epel` and `rpmfusion-free-updates` are not installed by default. I presume that `base`, `extras` and `updates` repos are installed on all version of CentOS 7.
```bash
# Get some information of the currently installed distribution
# Note: This is used to determine what repositories are need to be be installed
# and to create the relevant URLs
distro_name="$(grep -Po '^ID="*\K[^"]*' /etc/os-release)"
distro_version="$(rpm -E %$distro_name)"
if [ "$distro_name" = 'fedora' ]; then
distro_name_short='fedora'
else
distro_name_short='el'
epel_repo='epel-release'
fi
# epel (on CentOS only): required for `openjpeg2-devel`, `openssl-devel`
# rpmfusion-free-updates (on both CentOS and Fedora): required for `ffmpeg-devel`
# PowerTools (on CentOS 8+ only)
# okay (on CentOS 8+); required for `avahi-ui-devel`, `openh264`, `libopenh264-devel`, `libx264-devel`
sudo yum -y install $epel_repo \
https://download1.rpmfusion.org/free/${distro_name_short}/rpmfusion-free-release-${distro_version}.noarch.rpm
if [ "$distro_name" = 'centos' ] && [ "$distro_version" = 8 ]; then
sudo dnf config-manager --enable PowerTools
sudo rpm -ivh http://repo.okay.com.mx/${distro_name}/${distro_version}/x86_64/release/okay-release-1-3.el${distro_version}.noarch.rpm
# Disable okay repo for potential package conflicts
sudo dnf config-manager --disable okay
fi
if [ "$distro_name" = 'fedora' ]; then
sudo dnf config-manager --enable fedora-cisco-openh264
fi
```
**3.** Update `yum` cache and packages. This step might require a reboot.
```bash
sudo yum -y upgrade
```
**4.** Install dependencies of FreeRDP and Remmina. Note that the installation dependencies for FreeRDP and Remmina was merged. If you want to know exactly which program requires which package, see the [Dependencies](#dependencies) section at the end of this document.
```bash
sudo yum -y install alsa-lib-devel atk-devel avahi-ui-gtk3 cairo-devel cmake3 \
cups-devel docbook-style-xsl ffmpeg-devel gcc gcc-c++ git glib2-devel gnutls-devel \
gstreamer1-devel gstreamer1-plugins-base-devel gtk3-devel harfbuzz-devel \
json-glib-devel libappindicator-gtk3 libappindicator-gtk3-devel libgcrypt-devel \
libsecret-devel libSM-devel libsodium libsodium-devel libsoup-devel libssh-devel \
libusb-devel libvncserver-devel libX11-devel libXcursor-devel libXdamage-devel \
libXext-devel libXi-devel libXinerama-devel libxkbfile-devel libXrandr-devel libxslt \
libxslt-devel libXtst-devel libXv-devel make ninja-build openjpeg2-devel \
openssl-devel pango-devel pulseaudio-libs-devel vte291 vte291-devel webkitgtk4-devel \
xmlto xorg-x11-server-utils
# On CentOS 8
if [ "$distro_name" = 'centos' ] && [ "$distro_version" = 8 ]; then
sudo yum -y install --enablerepo=okay avahi-ui-devel openh264 libopenh264-devel libx264-devel
fi
# On Fedora
if [ "$distro_name" = 'fedora' ]; then
# TODO: Do we really need `libx264`? Or even `openh264` (that for CentOS too)?
sudo yum -y install avahi-ui-devel libx264 libx264-devel openh264 openh264-devel
fi
```
**5.** Clone FreeRDP and Remmina repos. You may want to modify the `${HOME}/{freerdp,remmina}` paths and the folder names.
```bash
git clone https://github.com/FreeRDP/FreeRDP.git ${HOME}/freerdp
git clone https://gitlab.com/Remmina/Remmina.git ${HOME}/remmina
```
**6.** Build FreeRDP.
```bash
mkdir ${HOME}/freerdp/build
cd ${HOME}/freerdp/build
# In the following line, the `DWITH_PULSE=ON` option needs to be included
# Note: `-DCMAKE_INSTALL_LIBDIR=/usr/lib64` is required when `-DCMAKE_INSTALL_PREFIX:PATH`
# is not `/usr`; otherwise Remmina will not find the `libfreerdp*` libraries
# Note: `-DWITH_OPENH264=ON -DWITH_X264=OFF` makes FreeRDP use H264 which results
# in extreme good quality for a quite good performance
cmake3 -DCMAKE_BUILD_TYPE=Debug -DWITH_SSE2=ON -DWITH_PULSE=ON -DWITH_CUPS=on -DWITH_WAYLAND=off \
-DCMAKE_INSTALL_LIBDIR=/usr/lib64 -DCMAKE_INSTALL_PREFIX:PATH=/opt -DWITH_OPENH264=ON \
-DWITH_X264=OFF ..
make && sudo make install
# If you install FreeRDP and Remmina to `/opt`, you need to add `/opt/bin` to PATH
export PATH="$PATH:/opt/bin"
echo 'export PATH="$PATH:/opt/bin"' >> ${HOME}/.bashrc
# You can test FreeRDP by connecting to an RDP host
xfreerdp +clipboard /sound:rate:44100,channel:2 /v:hostname /u:username
```
**7.** Make your system dynamic loader aware of the new libraries you installed
```bash
sudo ldconfig
```
**8.** Build Remmina.
```bash
mkdir ${HOME}/remmina/build
cd ${HOME}/remmina/build
# Note: `-DCMAKE_INSTALL_LIBDIR=/usr/lib64` is not required to successfully run Remmina,
# but `/usr/lib64` is the proper location for the libraries; again, it is not required
# at all when Remmina is installed to `/usr`
cmake3 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=/opt -DCMAKE_INSTALL_LIBDIR=/usr/lib64 \
-DCMAKE_PREFIX_PATH=/opt --build=build ..
make && sudo make install
```
**9.** If Remmina is installed to a custom path (e.g. for use `/opt`), we need to create some symlinks in order to .
```bash
sudo mkdir -p /usr/share/icons/hicolor/scalable/panel /usr/share/icons/hicolor/apps
for old in /opt/share/applications/*desktop $(find /opt/share/icons -type f | grep 'svg$\|png$'); do
new="${old/opt/usr}"
sudo ln -s $old $new
done
```
**10.** Now you should be able to run Remmina with the following command or using the GUI.
```bash
remmina &> /dev/null &
```
## Notes
### Remmina in the system tray on GNOME 3
Current GNOME Shell versions does not include system tray, therefore vanilla GNOME will not show the Remmina system tray icon and menu. Press Super+M to see the Remmina icon on the message bar. If you want to fix this, you could install either [KStatusNotifierItem/AppIndicator Support](https://extensions.gnome.org/extension/615/appindicator-support/).
Below is a guide how to install the extension. For more information on installing the `chrome-gnome-shell` , see the [documentation](https://wiki.gnome.org/Projects/GnomeShellIntegrationForChrome/Installation)
How to install [KStatusNotifierItem/AppIndicator Support](https://extensions.gnome.org/extension/615/appindicator-support/) extension
This method installs the extension locally (i.e. for current user only).
1. Install `chrome-gnome-shell` package.
```bash
sudo yum -y install chrome-gnome-shell
```
2. Install the browser extension. Go to [GNOME extension website](https://extensions.gnome.org) and click on _Click here to install browser extension_; or you can install it from [Firefox Browser Add-ons](https://addons.mozilla.org/en-US/firefox/addon/gnome-shell-integration/).
3. Install the [KStatusNotifierItem/AppIndicator Support](https://extensions.gnome.org/extension/615/appindicator-support/) extension by clicking on the toggle on that page (it must be on `on` position). Then confirm the installation.
4. Don't forget to re-login the GNOME. :smiley:
### Remmina in the system tray on Xfce
> :information_source: This might be outdated. If you know the current state of this issue or any workaround(s), open an [issue](https://gitlab.com/Remmina/Remmina/issues/new).
Xfce and other desktop environments without app indicator support, will not show you the system tray icon if you are executing Remmina from its compilation folder (e.g. `~/remmina`) because it contains a folder named `remmina`. For more infomation, see [Bug #1363277 on Launchpad](https://bugs.launchpad.net/libappindicator/+bug/1363277).
### Dependencies
1. If you are cloning the repositories, you need `git`.
2. FreeRDP dependencies:
```bash
# Official guide (src: https://github.com/FreeRDP/FreeRDP/wiki/Compilation [rhel based])
gcc cmake ninja-build openssl-devel libX11-devel libXext-devel libXinerama-devel \
libXcursor-devel libXi-devel libXdamage-devel libXv-devel libxkbfile-devel \
alsa-lib-devel cups-devel ffmpeg-devel glib2-devel libusb-devel
# We had to install these at least on CentOS 8, but they are probably required on CentOS 7 too;
# otherwise the build failed
make gcc-c++ pulseaudio-libs-devel libXrandr-devel
# Recommended: these are required to build man pages
libxslt libxslt-devel docbook-style-xsl
# Recommended: for multimedia redirection, audio and video playback
gstreamer1-devel gstreamer1-plugins-base-devel
# Recommended: for some X11 addon
xorg-x11-server-utils
# Recommended: at build-time, FreeRDP states that this is 'required by virtual:world'
cairo-devel
```
3. Remmina dependencies (besides FreeRDP and its dependencies):
```bash
atk-devel avahi-ui-devel avahi-ui-gtk3 cmake3 gnutls-devel gtk3-devel harfbuzz-devel \
json-glib-devel libappindicator-devel libappindicator-gtk3 libappindicator-gtk3-devel \
libgcrypt-devel libopenh264-devel libsecret-devel libSM-devel libsodium libsodium-devel \
libsoup-devel libssh-devel libvncserver-devel libx264-devel libXtst-devel openh264 \
openjpeg2-devel pango-devel vte291 vte291-devel webkitgtk4-devel xmlto
```