This means your system is missing icon files. Usually this happens if you installed using cargo-install
(which at present only supports installing the binaries).
You can resolve this by copying /res/logo/shadowsocks-gtk-rs.png
to /usr/share/icons/hicolor/512x512/apps/
or ~/.local/share/icons/hicolor/512x512/apps/
.
After a reboot the icon should be picked up.
Alternatively ssgtk
has launch parameters --icon-theme-dir
and --icon-name
if you want to use a custom icon.
- Yes!
runtime-api
is a default feature of this crate, which provides assgtkctl
binary. You can use it to make the application do various things. All you need to do is to bind a system shortcut to it. To see what it can do, simply run:
ssgtkctl --help
- Underneath the hood,
ssgtk
built with theruntime-api
feature starts a listener on a Unix socket, to which you can send commands in JSON5. Thessgtkctl
binary is merely a delegate to simplify the sending of said command. - If you wish to interface with the Unix socket directly, you can take a look at some example commands by running:
ssgtkctl --print-socket-examples
GTK's rust binding has significantly better support than that of QT. I'm too lazy to support both so the choice is obvious.
This project depends on libappindicator
for tray icon support, which only supports GTK3.
In fact libappindicator
development has moved to libayatana-appindicator
, which also doesn't support GTK4 just yet
but at least has an open issue for it. See here.
And finally, GTK4 is simply a bit too new and shiny for my liking. I much more prefer the stability and reputation offered by and associated with GTK3.
Because I'm a lazy arse.
More seriously though, because it's a stable API and it works. What more can you ask for?
Also making UI is painful. There are so many different flags and arguments you can set, and it will take me forever to create a UI element for each of them. Much easier instead, to create UI elements for the most commonly used items, while also giving more advanced users the option to specify more obscure settings using CLI arguments directly.
As an unintentional by-product, this also means you can just as well specify any other executable with arbitrary arguments, and this app will happily run it for you. It will just make all the fancy GUI settings useless.
It's complicated. I choose not to answer this question for the sake of my privacy and security.