-
-
Notifications
You must be signed in to change notification settings - Fork 171
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Linux improvements & development builds #216
Conversation
On Linux, pystray's icon.stop() currently doesn't work well with the AppIndicator backend. So, instead of destroying the icon when the user restores from tray (only to later re-create it when the user minimizes to tray again), we have the option to control the icon's visibility instead! Luckily, that works on Windows too! Note that for this change to work properly on Linux, we need to switch to the master version of pystray, because we need this specific fix: moses-palmer/pystray@5943ed4 After pystray releases a version newer than 0.19.4, we can switch back. Co-authored-by: DevilXD <[email protected]>
This fixes an issue on Linux (more specifically, on GNOME Shell 44), where the window would be identified as "Tk".
Makes the app exit correctly on Linux when the main window is closed.
This dependency is required for proper support of the AppIndicator backend from pystray: https://github.com/moses-palmer/pystray/blob/v0.19.4/docs/faq.rst#how-do-i-use-pystray-in-a-virtualenv-on-linux
Because Linux distributions don't have an 'universal' path for the system certificate store, bundling libssl built on distro A might not work on distro B, because distros tend to change path to the certificate store at build time. This means that creating a PyInstaller package on Ubuntu will include the libssl built there, and if you try to run this package on a different distro (e.g. Arch Linux), any attempt to create an SSL connection will fail, because Arch Linux has a different path for the certificate store than Ubuntu. This issue is usually worked around by bundling certificates with the app (usually using certifi), and then pointing the SSL_CERT_FILE environment to it. However, truststore seems to be a better alternative, since it tries to use the certificate store from the system instead. The list of benefits are listed on the project's page on GitHub: https://github.com/sethmlarson/truststore
Because PyInstaller modifies the LD_LIBRARY_PATH environment variable to make things work correctly on Linux, when we try to launch any subprocess (such as the web browser), that modified variable gets picked up as well, causing things to go south. To work around this Linux-only problem, we have to: 1. Save the current value of LD_LIBRARY_PATH 2. Move the value of LD_LIBRARY_PATH_ORIG to LD_LIBRARY_PATH 3. Launch subprocess 4. Restore the saved LD_LIBRARY_PATH again Reference: https://pyinstaller.org/en/stable/runtime-information.html#ld-library-path-libpath-considerations Co-authored-by: DevilXD <[email protected]>
Very well. I've added some small stylistic and wording modifications from my side, which you can find on my |
This greatly reduces the final size of the UPX-compressed binary, from 78.7 MiB to 54.9 MiB (a 23.8 MiB difference)! Co-authored-by: DevilXD <[email protected]>
This fixes the following error when you launch the app with an emoji font installed (e.g. Noto Emoji): X Error of failed request: BadLength (poly request too large or internal Xlib length error) Major opcode of failed request: 139 (RENDER) Minor opcode of failed request: 20 (RenderAddGlyphs) Serial number of failed request: 277 Current serial number in output stream: 300 This has been fixed[1] in libXft 2.3.5[2], but unfortunately Ubuntu 20.04 (which we currently use in the Linux CI workflow), still has version 2.3.3, so we have to build it ourselves. [1] https://gitlab.freedesktop.org/xorg/lib/libxft/-/merge_requests/12 [2] https://lists.freedesktop.org/archives/xorg-announce/2022-September/003209.html
Honestly, I don't really care, as long as it keeps the expected structure - a single commit message explains a single addition. You'll probably have to edit some commit message(s) to get it right, but sure, you can squash them. I pushed those 3 commits right before going to sleep, and didn't catch some missing backticks here and there, so there's a 4th commit now. You can squash that commit too as well. |
Co-authored-by: DevilXD <[email protected]>
Alright, done. Let me know if the commits look good enough. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very well. Thank you so much for your contribution 😊
This adds many Linux improvements and fixes (more details in each commit's description).
This also adds support for development builds for Linux through GitHub Actions.
Closes #113