|Martchus b5aa29c98b||1 week ago|
|.github/ISSUE_TEMPLATE||11 months ago|
|cli||4 weeks ago|
|connector||1 week ago|
|fileitemactionplugin||1 month ago|
|include||2 months ago|
|libsyncthing||1 week ago|
|model||1 week ago|
|plasmoid||1 month ago|
|scripts||3 years ago|
|testhelper||3 months ago|
|tray||1 week ago|
|widgets||3 weeks ago|
|.gitignore||2 years ago|
|.gitmodules||3 years ago|
|CMakeLists.txt||1 week ago|
|LICENSE||5 years ago|
|LICENSES-windows-distribution.md||1 year ago|
|README.md||1 week ago|
Checkout the official forum thread for discussions and announcement of new features.
Issues can be created on GitHub but please read the "Known bugs" and "Planned features" sections in this document before.
I provide binaries/repositories for some platforms. There are also binaries/repositories provided by other distributors. For a list with links, checkout the Download section of this document. The release section on GitHub only contains a fraction of the available options.
If you can confirm it works under other desktop environments, please add it to the list.
The Qt Widgets based version basically works under Wayland but there are positioning issues and the settings regarding positioning have no effect (see known bugs section). One can workaround this limitation by telling the window manager how to place the window, e.g. under Sway one could add a configuration like this:
for_window [title="^Syncthing Tray( \(.*\))?$"] floating enable, border none, resize set 450 400, move position 916 0
Syncthing Tray does not launch Syncthing itself by default. There should be no interference with your existing Syncthing installation. You might consider different configurations:
The screenshots are not up-to-date.
The next section explains what it is good for and how to use it. If it doesn't work on your system please read the subsequent sections as well before filing an issue.
With the system configured correctly and systemd support enabled at build-time the following features are available:
However, these features are optional. To use them they must be enabled in the settings dialog first.
It is recommended to enable "Consider unit status …". Note that Syncthing might still not be immediately ready to serve API requests when the systemd unit turns active. Hence it is still required to configure a re-connect interval. The re-connect interval will only be in effect while the systemd unit is active. So despite the re-connect interval there will be no connection attempts while the systemd unit is inactive. That's all the systemd integration can optimize in that regard.
Be aware that Syncthing Tray assumes by default that the systemd unit is a
user unit. If you are using
a regular system-wide unit (including those started with
…@username) you need to enable the
"System unit" checkbox in the settings. Note that starting and stopping the system-wide Syncthing
unit requires authorization (systemd can ask through PolicyKit).
The communication between Syncthing Tray and systemd is implemented using systemd's D-Bus service.
That means systemd's D-Bus service (which is called
org.freedesktop.systemd1) must be running on
your D-Bus. For user units the session D-Bus is
relevant and for regular units (including those started with
…@username) the system D-Bus is relevant.
It seems that systemd's D-Bus service is only available when D-Bus itself is started via systemd. That
is by default the case under Arch Linux and openSUSE and likely most other modern distributions where
it is usually started via "socket activation" (e.g.
/usr/lib/systemd/user/dbus.socket for the session
All of this counts for the session D-Bus and for the system D-Bus although the startup of the session
D-Bus can be screwed up particularily easy. One easy way to screw it up is to start a second instance of
the session D-Bus manually e.g. via
dbus-run-session. When starting the session D-Bus this way the
systemd integration will not work and you will likely end up with two session D-Bus processes. It is
also worth noticing that you do not need to set the
DBUS_SESSION_BUS_ADDRESS variable manually
because the systemd file
dbus.socket should take care of this.
Note that the Plasma Wayland session screwed things up in the way I've described. This has been fixed with Only spawn dbus-run-session if there isn't a session already but this change might not be available on older distributions.
The systemd integration can be explicitely enabled/disabled add compile time by adding
-DSYSTEMD_SUPPORT=ON/OFF to the CMake arguments. If the systemd integration does not work be sure your
version of Syncthing Tray has been compiled with systemd support.
Note for distributors: There will be no hard dependency to systemd in any case. Distributions supporting alternative init systems do not need to provide differently configured versions of Syncthing Tray. Disabling the systemd integration is mainly intended for systems which do not use systemd at all (e.g. Windows and MacOS).
The built-in launcher can be accessed and configured within the settings dialog. The GUI should be self-explaining.
It is recommended to enable "Consider process status …". Note that Syncthing might not be immediately ready to serve API requests when started. Hence it is still required to configure a re-connect interval. The re-connect interval will only be in effect while the Syncthing process is running. So despite the re-connect interval there will be no connection attempts while the Syncthing process is not running.
Use the same approach as for launching an arbitrary application via a hotkey. Make it invoke
syncthingtray --triggerto show the tray menu.
syncthingtray --webuito show the web UI.
syncthingctl [...]to trigger a particular action. See
syncthingctl -hfor details.
See the release section on GitHub.
syncthingtray: Qt-widgets based GUI
syncthingplasmoid: widget for Plasma desktop
syncthingfileitemaction: Dolphin/KIO integration
syncthingctl: command line interface
The application depends on c++utilities and qtutilities and is built the same way as these libaries. For basic instructions checkout the README file of c++utilities. For building this straight, see the section below. There's also documentation about various build variables which can be passed to CMake to influence the build.
The following Qt modules are requried (version 5.6 or newer): core network dbus gui widgets svg webenginewidgets/webkitwidgets
It is recommended to use at least Qt 5.14 to avoid limitations in previous versions (see Known bugs section).
The built-in web view and therefore the modules webenginewidgets/webkitwidgets are optional (see section Select Qt module for WebView).
To build the plugin for Dolphin integration KIO is also requried. Additionally, the Dolphin plugin requires Qt 5.8 or newer. To skip
building the plugin, add
-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON to the CMake arguments.
To build the Plasmoid for the Plasma 5 desktop, the Qt module QML and the KF5 module
Plasma are required as well. Additionally, the Plasmoid requires Qt 5.12 or newer. To skip
building the Plasmoid, add
-DNO_PLASMOID:BOOL=ON to the CMake arguments.
It is also possible to build only the CLI (syncthingctl) by adding
-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON to the CMake arguments. Then only the Qt modules core,
network and dbus are required.
To get rid of systemd support, add
-DENABLE_SYSTEMD_SUPPORT_BY_DEFAULT to the CMake arguments.
In this case the Qt module D-Bus is not required anymore. Note that there is no hard dependency
to systemd in any case.
Building the testsuite requires CppUnit and Qt 5.8 or higher.
cd $SOURCES git clone https://github.com/Martchus/cpp-utilities.git c++utilities git clone https://github.com/Martchus/qtutilities.git git clone https://github.com/Martchus/syncthingtray.git git clone https://github.com/Martchus/subdirs.git
cd $BUILD_DIR cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="/install/prefix" \ $SOURCES/subdirs/syncthingtray
/install/prefixwith the directory where you want to install.
cd $BUILD_DIR make install -j$(nproc)
DESTDIRto a writable location (e.g.
make DESTDIR="temporary/install/dir" install …) and move the files from there to the desired location afterwards.
-DWEBVIEW_PROVIDER:STRING=webkit/webengine/noneto the CMake arguments to use either Qt WebKit (works with 'revived' version as well), Qt WebEngine or no web view at all. If no web view is used, the Syncthing web UI is opened in the default web browser. Otherwise the user can choose between the built-in web view and the web browser.
If the Dolphin integration or the Plasmoid don't work, check whether the files for those components have been installed in the right directories.
For instance, under Tumbleweed it looks like this for the Plasmoid:
/usr/lib64/qt5/plugins/plasma/applets/libsyncthingplasmoid.so /usr/share/kservices5/plasma-applet-martchus.syncthingplasmoid.desktop /usr/share/plasma/plasmoids/martchus.syncthingplasmoid/contents/ui/*.qml /usr/share/plasma/plasmoids/martchus.syncthingplasmoid/metadata.desktop /usr/share/plasma/plasmoids/martchus.syncthingplasmoid/metadata.json
The files for the Dolphin integration look like this under Tumbleweed:
The directory the
*.so file needs to be installed to seems to differ from distribution to
distribution. The right directory for your distribution can be queried from qmake using
qmake-qt5 -query QT_INSTALL_PLUGINS. In doubt, just look where other Qt plugins are stored.
Actually the build system should be able to do that query automatically. It is also possible to
specify the directory manually, e.g. for Tumbleweed one would add
-DQT_PLUGIN_DIR=/usr/lib64/qt5/plugins to the CMake arguments.
Also be sure that the version of the plasma framework the plasmoid was built against is not newer
than the version actually installed on the system. That can for instance easily happen when using
tumbleweed-cli for sticking to a previous snapshot but having the lastest version of the plasmoid
from my home repository installed.
If the Plasmoid still won't load, checkout the log of
Also consider using strace to find out at which paths the shell is looking for
For a development setup of the KDE integration, continue reading the subsequent section.
Currently translations for English and German are available. Qt's built-in localization/translation framework is used under the hood.
syncthingctl has not been internationalized yet so it supports only English.
Translations for further locales can be added quite easily:
3.of "Add a new locale". Check that no translations have been lost (except ones which are no longer required of course).
translationsdirectories like in step
5.of "Add a new locale".
syncthingctlcurrently does not support translations.
The contained backend libraries (which provide connecting to Syncthing, data models and more) are written for internal use whithin the components contained by this repository.
Hence those libraries do not provide a stable ABI/API. If you like to use them to develop Syncthing integration or tooling with Qt and C++, it makes most sense to contribute it as an additional component directly to this repository. Then I will be able to take it into account when changeing the API.
Since the Dolphin integration and the Plasmoid are plugins, testing and debugging requires a few extra steps. See Testing and debugging Dolphin/KIO plugin with Qt Creator and Testing and debugging Plasma 5 plasmoid with Qt Creator.
The tray is still under development; the following features are under construction or planned:
The following bugs are caused by dependencies and hence tracked externally. For bugs of Syncthing Tray itself, checkout the issues on GitHub.