Commit graph

401 commits

Author SHA1 Message Date
Eberhard Beilharz
9d2b17613c
chore(linux): add manual test for localization
This change adds a manual test that allows to see if all strings are
localizable. It also fixes the `update-template` target in the
`Makefile`.

Build-bot: skip
Test-bot: skip
2025-12-15 19:05:58 +01:00
Eberhard Beilharz
e77d2432ef
Merge pull request #14973 from keymanapp/chore/linux/14957_parseversion
chore(linux): replace deprecated `parse_version`

`pkg_resources` which contains `parse_version` is deprecated. Latest versions output a warning. This change uses the suggested replacement, `package.version.parse` which is available in all supported Ubuntu versions.

Fixes: #14957
2025-10-17 09:15:18 +02:00
Eberhard Beilharz
ddb9522337
chore(linux): replace deprecated parse_version
`pkg_resources` which contains `parse_version` is deprecated. Latest
versions output a warning. This change uses the suggested replacement,
`package.version.parse` which is available in all supported Ubuntu
versions.

Fixes: #14957
2025-10-16 18:27:57 +02:00
Eberhard Beilharz
1958cd52bf
fix(linux): use ibus command to restart ibus
When using Kubuntu exiting ibus sometimes used to hang (#10178). This
was because ibus' `bus.exit()` doesn't shutdown properly
(see https://github.com/ibus/ibus/issues/2816#issuecomment-3410473708).
The recommended way is to use the `ibus exit` command. Since we no longer
use the API we can directly use the `ibus restart` command, which this
PR implements.

Fixes: #10178
2025-10-16 16:58:18 +02:00
Eberhard Beilharz
7574d2eb68
Merge pull request #14953 from keymanapp/fix/linux/14911_instshared
fix(linux): fix installing keyboard in shared area 🍲

Installing into the shared area (`/usr/local/share`) requires `root` permissions, so in order to install into the shared area the user has to call `km-package-install` with `sudo`. But we also want to add the keyboard to the user's list of available keyboards so that he can switch to it. That needs to be done in the user context. However, when `sudo` ran the command in the user context, the environment variables to connect to the user's session dbus were not set.

This change fixes this by passing `DBUS_SESSION_BUS_ADDRESS` along with the `sudo -u <user>` call. Since `root` doesn't have this variable set (or at least not pointing to the user's dbus), we construct the dbus address based on the user's uid.

On newer Ubuntu versions (>=25.04) we also have to set `XDG_RUNTIME_DIR`, at least when running the autopkgtests.

Fixes: #14911
2025-10-16 15:33:34 +02:00
Eberhard Beilharz
7da6a4e98c
Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-10-16 15:17:35 +02:00
Eberhard Beilharz
58875a5680
fix(linux): refactor common strings
Also some other minor changes to address code review comments.
2025-10-16 12:33:56 +02:00
Eberhard Beilharz
be62a31a25
Merge pull request #14938 from keymanapp/chore/linux/sentryautopkgtests
chore(linux): don't report errors to Sentry when running autopkgtests 🍲
2025-10-16 12:11:09 +02:00
Eberhard Beilharz
d1fa884266
refactor(linux): remove no-longer-needed code
Our oldest supported Ubuntu version is 22.04 which comes with Python 3.10,
so we can remove the code for Python 3.7.

Test-bot: skip
2025-10-14 18:03:57 +02:00
Eberhard Beilharz
b7d5e89577
fix(linux): fix installing keyboard in shared area
Installing into the shared area (`/usr/local/share`) requires `root`
permissions, so in order to install into the shared area the user has
to call `km-package-install` with `sudo`. But we also want to add the
keyboard to the user's list of available keyboards so that he can
switch to it. That needs to be done in the user context. However,
when `sudo` ran the command in the user context, the environment
variables to connect to the user's session dbus were not set.

This change fixes this by passing `DBUS_SESSION_BUS_ADDRESS` along
with the `sudo -u <user>` call. Since `root` doesn't have this variable
set (or at least not pointing to the user's dbus), we construct the
dbus address based on the user's uid.

On newer Ubuntu versions (>=25.04) we also have to set `XDG_RUNTIME_DIR`,
at least when running the autopkgtests.

Fixes: #14911
2025-10-14 17:54:36 +02:00
Eberhard Beilharz
3690fec1f2
fix(linux): don't cache files when running with sudo
When running `km-package-install` with `sudo`, cache files owned by
root get created in the users directory. This makes it harder to
replace, and if the user tries to install the keyboard again under his
user account, installation will fail. This change prevents the use
of the cache when running with `sudo`.

Test-bot: skip
2025-10-14 09:55:47 +02:00
Eberhard Beilharz
eaf0183460
chore(linux): don't report errors to Sentry when running autopkgtests
Test-bot: skip
2025-10-13 18:29:24 +02:00
Eberhard Beilharz
6ef624e7e6
fix(linux): replace dbus-x11 dependency
When using a different DBus implementation `dbus-launch` might not exist,
but instantiating a `SessionBus` object might start a session dbus if
it's not already running. This change also replaces the `dbus-x11`
dependency with `default-dbus-session-bus | dbus-session-bus` and changes
the way we detect if dbus is already running.

Also remove `DBUS_SESSION_BUS_ADDRESS` from `sudo gsettings` call. It
turns out we don't need this since we execute the `gsettings` command
in the context of the user anyway which connects to the user's session
dbus.

Fixes: #14888
2025-10-07 16:23:49 +02:00
Eberhard Beilharz
596371dde2
feat(linux): improve Sentry error reports
- add breadcrumbs with keyboard details
- add some more information about system
- mark files in `km_config` as to the app belonging
- some refactorings

Test-bot: skip
2025-09-16 18:23:47 +02:00
Eberhard Beilharz
f3643827d1
Merge pull request #14760 from keymanapp/fix/linux/14748_TypeError
Fixes: #14748
Fixes: KEYMAN-LINUX-8Q
2025-09-16 14:33:23 +02:00
Eberhard Beilharz
466fd06665
refactor(linux): remove warning
Using `if var := func():` syntax outputs a warning
`FutureWarning: The behavior of this method will change in future
versions. Use specific 'len(elem)' or 'elem is not None' test instead.`
in Python 3.12. This change works around this warning.

Test-bot: skip
2025-09-15 16:52:07 +02:00
Eberhard Beilharz
8d9c3ee09b
fix(linux): don't crash on invalid languages in keyboard
Fixes: #14748
Fixes: KEYMAN-LINUX-8Q
2025-09-15 16:37:22 +02:00
Eberhard Beilharz
189ee50e24
fix(linux): don't crash if kmp.json is missing keyboards section
Some keyboards seem to be missing the `keyboards` section in the
`kmp.json` file. This change prevents a crash and instead returns `None`
and thus we don't create a .ldml file and so onboard will show the
default keyboard instead. The alternative would be to create an empty
.ldml file, but that causes onboard to show a keyboard with all key caps
being empty.

Fixes: #14707
Fixes: KEYMAN-LINUX-8P
Test-bot: skip
2025-09-08 18:06:36 +02:00
Eberhard Beilharz
951793ea84
fix(linux): normalize language tags from keyboard
This fixes a bug where a keyboard didn't show up in the language dropdown
if the first language it specified wasn't a normalized language tag.
Previously in that case we added a custom keyboard with whatever language
tag the keyboard specified. With this change we now continue to use
the first language of the first keyboard but normalize it. Since the
selection of the language now happens a little earlier it is slightly
possible that there will be unexpected side effects that didn't show up
in my testing.

Fixes: #14465
2025-08-18 19:49:38 +02:00
Eberhard Beilharz
3cb9fe2a65
fix(linux): fix variable replacements
This fixes the version numbers in `km-config` which broke with #13854.
This also fixes opening the download page in `km-config` because that
uses a version number in the URL.

Fixes: #14031
Follow-up-of: #13854
2025-05-22 16:20:18 +02:00
Eberhard Beilharz
4d81589f48
maint(common): use unique names for Keyman version variables
Previously the builder scripts defined a readonly `VERSION` environment
variable for the Keyman version. That caused problems when another
(external) script tried to define a `VERSION` variable. We encountered
this problem when trying to move the TC build steps of a configuration
into a single script (#13399) when we tried to source `~/.nvm/nvm.sh`.

This change uses a Keyman specific prefix for the version variables and
renames `VERSION` → `KEYMAN_VERSION` etc. Unfortunately these variables
are used in a lot of places, so this turned out to be a bit of a yak
shave.

Test-bot: skip
2025-05-07 18:46:51 +02:00
Marc Durdin
4f829f5c8f chore: Merge remote-tracking branch 'origin/master' into chore/merge-beta-to-master-b18s5 2025-04-21 07:13:35 +07:00
Eberhard Beilharz
d1b74d0175
chore(linux): fall back to package id
This change addresses a code review comment. In the case where the kmp
doesn't contain a name, we now use the `packageID` instead.
2025-04-03 15:56:07 +02:00
Eberhard Beilharz
5df36c05a4
fix(linux): fix crash if kmp doesn't have name field
Fixes: #13647
Fixes: KEYMAN-LINUX-80
2025-04-02 18:20:11 +02:00
Marc Durdin
f61a104acf
Merge branch 'master' into chore/merge-beta-into-master-B18S2 2025-03-01 15:45:19 +07:00
Eberhard Beilharz
097a416a06
Merge pull request #13363 from keymanapp/fix/linux/13282_fcitx5-configtool
fix(linux): ignore exception when fcitx5-configtool is not found
2025-02-27 17:14:20 +01:00
Eberhard Beilharz
788e778645
Merge pull request #13356 from keymanapp/fix/linux/12902_UninstallException
fix(linux): ignore DBusException during install and uninstall
2025-02-27 15:28:52 +01:00
Eberhard Beilharz
d90b718aa5
fix(linux): ignore exception when fcitx5-configtool is not found
Fixes: #13282
Fixes: KEYMAN-LINUX-7S
2025-02-27 11:12:30 +01:00
Eberhard Beilharz
a35c6b3c29
Merge pull request #13355 from keymanapp/refactor/linux/tests
refactor(linux): extract method for setting up mocks in tests
2025-02-27 08:37:20 +01:00
Eberhard Beilharz
6fe916ca8b
fix(linux): ignore DBusException during install and uninstall
Fixes: #12902
Fixes: #13283
Fixes: KEYMAN-LINUX-7J
Fixes: KEYMAN-LINUX-7R
2025-02-26 18:24:27 +01:00
Eberhard Beilharz
a4492963e9
refactor(linux): improve dbus_util.py code 2025-02-26 17:19:09 +01:00
Eberhard Beilharz
3e09884c68
chore(linux): adjust to renamed xdg module
The `xdg` module got renamed to `xdg_base_dirs`. However, Ubuntu still
ships the `python3-xdg` package with the old module, so we'll have to
support both so that it'll work with both Ubuntu packages and in a
virtual environment.
2025-02-26 12:14:00 +01:00
Marc Durdin
d6e7c0b9d1 chore: Revert "Merge branch 'master' into beta"
This reverts commit fae3932e15, reversing
changes made to 793daddb48.
2025-02-14 07:45:28 +07:00
Eberhard Beilharz
f1b32a1439
chore(linux): additional code cleanup after Focal removal 2025-02-12 12:21:49 +01:00
Eberhard Beilharz
248f01f1e3
chore(linux): change SIL International to SIL Global 2024-12-10 10:26:44 +01:00
Eberhard Beilharz
5b570517b1
fix(linux): display error and abort if fonttools are missing 2024-08-28 16:14:17 +07:00
Eberhard Beilharz
50228a8266
fix(linux): properly deal with types of names
Names can be Unicode strings or byte arrays. This change allows for both
kinds. Also properly deal with the case when we can't get the name from
the .ttf file. And finally change the test so that we don't need the
`KbdKhmr.ttf` font.
2024-08-24 12:16:04 +08:00
Eberhard Beilharz
c8cbc2fefe
fix(linux): get font facename from .ttf file 2024-08-24 11:31:23 +08:00
Eberhard Beilharz
c99e833c8e
fix(linux): Add font name without file extension 2024-08-24 10:25:57 +08:00
Eberhard Beilharz
16ce5b0408
fix(linux): get oskFont from kmp.json instead of UnicodeFont 2024-08-24 10:07:36 +08:00
Eberhard Beilharz
a22a40fe2e
fix(linux): add keymanFacename to .ldml file
This change adds the `keymanFacename` attribute based on UnicodeFont
or AnsiFont to the root element of the generated .ldml file so that
onboard-keyman can display the proper font for the osk.

Fixes: #12019
2024-08-23 22:42:16 +02:00
Eberhard Beilharz
6bfa8a438f
refactor(linux): cleanup API of kvk2ldml.py
Make methods private that are only used inside of kvk2ldml.py.
2024-08-23 22:40:31 +02:00
Eberhard Beilharz
07a2cb5bad
Merge pull request #11852 from keymanapp/feat/linux/7697_SimulateAltGr
feat(linux): implement Linux side of SimulateAltGr option 🏁
2024-06-26 12:34:08 +02:00
Eberhard Beilharz
582ccbec11
fix(linux): ignore exceptions trying to install cache
Using the cache when getting data from the server is just an optimization
to speed up things. However, things still work if we don't use the cache.
This change therefore catches the AttributeError that sometimes happen
on some machines for unknown reasons and falls back to not using the
cache.

Fixes: 11855
Fixes: KEYMAN-LINUX-6R
2024-06-24 18:13:28 +02:00
Eberhard Beilharz
3c800ed65a
feat(linux): implement UI part of SimulateAltGr option 2024-06-21 18:24:02 +02:00
Eberhard Beilharz
2b7d74f4b6
refactor(linux): add KeymanOption class for options 2024-06-21 18:08:56 +02:00
Eberhard Beilharz
64515b025b
feat(linux): re-create missing files at run-time
This changes re-creates the `<package>.bmp.png` as well as the
`<package>.json` files if they are missing when `km-config` starts.

- `<package.bmp.png` gets created from a `.bmp` or `.ico` file included
in the package, similar to what happens when installing the keyboard.
- `<package>.json` gets created from downloaded metadata, similar to
the installation.

If the files are missing or we can't write to the directory, e.g. if it's
the shared area, we skip the re-creation.

Fixes: #9396
2024-06-14 18:11:11 +02:00
Eberhard Beilharz
a5b9321fde
refactor(linux): make method private and change variable names 2024-06-14 15:58:21 +02:00
Eberhard Beilharz
2044b188f8
fix(linux): Improve detection of Gnome environment
This change improves the way we detect if we're running a Gnome based
UI that needs it's keyboards installed under
`org.gnome.desktop.input-sources`. We use the environment variable
`XDG_CURRENT_DESKTOP` and check if it contains the word `gnome`.
Additionally this change renames `is_gnome_shell()` to
`is_gnome_desktop()`.

Fixes #11225.
2024-04-23 15:16:03 +02:00
Eberhard Beilharz
aefcfb1849
fix(linux): Fix cleanup of files 2024-03-22 15:42:27 +01:00