My Google Summer of Code 2021

Blog Posted on openSUSE News about the Project
Project Introduction
IBus Customize @openSUSE by Songlin Jiang (@HollowMan6)
Before GSoC 2021, the IBus theme follows the global GNOME-Shell theme in GNOME and the global GTK theme in other desktop environments, and IBus lacks customization for users in GNOME.
Main Focus
This project aims to make IBus themes separate from the current GNOME-Shell theme and GTK theme so that users can customize it with other GNOME-Shell themes and GTK themes.
Other Goals
Improve the UI usability for IBus in GNOME. That is, to add more features, including customization of orientation, animation, font, opacity. Support right-click to switch the input source or open the tray menu, scroll to switch among pages or candidates, fix candidate box and IME switch list order, ASCII mode auto-switch, reposition, show or hide candidate box page buttons, set system tray settings, input source indicator with settings. Theme and background picture follow GNOME Night Light Mode, and so on. These customizations will make users find IBus in GNOME familiar if they have just switched from another platform. Eventually, an extension providing full customization of appearance, behavior, system tray, input source indicator for IBus will be available.
Archived Codebase

Contribution in Details
Blog Posts both in Chinese and English of the Documentations Related to the Project User Guide
Customize IBus Extension (All the commits and releases submitted by @HollowMan6 are my contributions)

Functionalities
- Candidate Box Orientation (imported from ibus-tweaker, refer to ibus-font-setting for settings sync with
ibus-setup) - Candidate Box Animation (thanks for the help from Florian Müllner)
- Right-click Candidate Box to Switch the Input Mode or Open the Tray Menu
- Scroll on Candidate Box to Switch among Pages or Candidates
- Fix Candidate Box to Not Follow the Caret and Set Fixed Position
- Candidate Box Font (imported from ibus-tweaker and ibus-font-setting)
- Input Mode Remember and Auto-switch by APP (imported from ibus-tweaker, refactor to enable configuring input mode remember)
- Change Candidate Box Opacity
- Fix IME List Order (imported from fixed-ime-list)
- Drag Candidate Box to Reposition
- Show or Hide Candidate Box Page Buttons
- Restart or Start IBus from Preferences
- System Tray Menus and Interaction Settings
- Show or Hide Tray Icon
- Directly Click Tray Icon to Switch Input Mode
- Add Additional Menu
- Input Source Indicator Appearance and Interaction Settings
- Enable Indicator
- Only Indicate when Switching Input Mode
- Only Indicate when Using ASCII Input Mode
- Right-click Indicator to Hide
- Scroll on Indicator to Switch Input Mode
- Indicator Animation
- Customize Font
- Left-click Indicator to Drag to Move Indicator or Switch Input Mode
- Change Opacity
- Enable Auto-hide Indicator and Configure Auto-hide Timeout
- Configure Theme (Stylesheet Provided by IBus Theme Hub or Extracted from IBus Theme Tools GNOME Shell Themes)
- Add a Candidate Box Background Picture and Configure its Displaying Style
- Theme and Background Picture Follow GNOME Night Light Mode (partly referred to ibus-tweaker for this feature)
- Multi GNOME Version Support ranging from GNOME 3.34 to GNOME 40 Simultaneously
- Hot Reload Support for Theme
- Reset to Default Settings
- Export Current Settings to File
- Import Current Settings from File
- Open Official Settings from Preferences
- Multi-Linguistic Support (Chinese and English)
- Packages Definition Files that can Pack it in Arch, RPM Based, Debian Based
- Logo Design
- Eslint and Prettier Check Support
- Workflow for Auto-Generating Extension Upload Zip file
- Distribution Repos
- Makefile for Build, Release, Package, Translate
(Credits for the GJS Documentation and GNOME Shell Codebase!)
Issues and PRs Opened and Resolved
Submitted to Open Build Service
Source Repository (Before revision 87)
Upstream Repository (Before revision 4)

IBus Theme Tools (All the commits and releases submitted by @HollowMan6 are my contributions)

Functionalities
- Non-GNOME Desktop Change IBus GTK Theme, Add Theme Settings to Startup (Before v3). Generate an IBus Mixed GTK theme, Supporting to Select a Background Picture and Configure Border Radius (After v4)
- GNOME Desktop Extract IBus Style from GNOME Shell Theme
- Pack into Module Using Python Package Setup
- Multi-Linguistic Support (Chinese and English)
- Workflow for Python Package Check
- Packages Definition Files that can Pack it in Arch
- Makefile for Build, Release, Package, Translate
Issues and PRs Opened and Resolved
Submitted to Open Build Service
Source Repository (Before revision 17)
Upstream Repository (Before revision 3)

IBus Theme Hub (All the commits and releases submitted by @HollowMan6 are my contributions)

Functionalities
- Microsoft IME Theme (imported from ibus-tweaker Stylesheet, Page buttons added by Me)
- Nord Theme (contributed by @stonegate, I did some fixes)
- PR template
Issues, Discussions, and PRs Opened and Resolved
IBus (All the commits and releases submitted by @HollowMan6 are my contributions)

openSUSE Tumbleweed – Review of Weeks 2021/32 & 33
Dear Tumbleweed users and hackers,
Dominique has been enjoying a vacation these last two weeks and left Tumbleweed in my hands. It’s been quite an interesting fortnight.
These two weeks have only seen 3 snapshots released, numbered 0807, 0810 and 0817. Snapshots 0811, 0812, 0816 and 0818 were all produced but discarded for a number of reasons including:
- DVD ISO grew too big (twice!)
- Random vim build failure produced an amusingly broken snapshot
- And probably a few other bits and pieces I’m forgetting now
Plus on a personal note this was the fortnight I moved house so I wasn’t able to fix all the issues as fast as normal when they came up. Thanks for everyone’s patience and understanding
The changes delivered these weeks included:
- kernel 5.13.8
- KDE Gear 21.08
- apparmor 3.0.3
- vim 8.2.3318
- And lots of other miscellaneous fixes
The future, near or far, will bring those updates:
- kernel 5.13.12 (Currently being tested in 0819)
- systemd v249.2
- nodejs 16.6.2
- glibc 2.34
- podman & crio with crun enabled by default
- and many more…
Have a lot of fun!
– Richard
openqa-cli Cheatsheet
Checkout the new openqa-cli cheat sheet page where I start to collect some useful “how do I do …” snippets for the openQA CLI utility openqa-cli.
Tumbleweed Fast Forwards with KDE Gear, Frameworks Updates
A lot of work this week has been taking place in the background to release openSUSE Tumbleweed snapshots.
Documented on the mailing list in the latest openSUSE release engineering meeting was information about some challenges Tumbleweed development had this week building images with the Open Build Service. There were some build failures, which caused some broken builds. These builds aren’t released as a snapshot since these must pass openSUSE’s openQA testing. The size of the ISO media also became too large to fit on a DVD; adjustments are made frequently when the capacity exceeds the size, so let’s get into the snapshot that was released.
The efforts to build, test and release a successful snapshot did come with the release of snapshot 20210817. Users received some much anticipated software with some really cool new features. KDE Gear 21.08.0 was among the many packages for rolling release users. The Dolphin file manager now shows an animated sequence of previews for folders containing a lot of previewable files. Its preview code has also been optimized so thumbnails pop up faster and files inside encrypted locations, such as Plasma Vaults, can show a preview. The PDF viewer Okular made some enhancements in the toolbar that allows for a color design to make reading more comfortable and to help avoid eye-strain. The Konsole terminal offers a preview feature from the command line when hovering the cursor over image filenames. Enhancements were also made for the Gwenview image viewer and the Elsa music player. KDE Frameworks 5.85.0 also came in the snapshot. The developer user interface Kirigami corrected some spacing between the close button and action buttons. It also added a method to push a page as a new window on the desktop. Optimizations for the network mounting performance were made to the KTextEditor and KWayland fixed a check for an mmap system call failure. AppStream, which is a package that provides a standard for creating app stores across distributions, updated to version 0.14.4 and improved text line wrapping. Mozilla Thunderbird 78.13.0 fixed a half dozen Common Vulnerabilities and Exposures; three of those involved fixes for possible memory corruption. Better native Wayland support for handling client-side decorations and other functionality were made to the update of media SDL2 2.0.16. The first major 1.0.0 version for firewalld was released in the snapshot; the dynamically managed firewall reduced dependencies, cleaned the spec file and deprecated the iptables backend. Vector graphics editor inkscape advanced a few minor versions to 1.1 and added a Welcome dialog where the look of Inkscape can be selected and some choices for the new document size or file to open are available. And when pasting a copied object, Inkscape now pastes it directly on top of the currently selected object by default. There is a list of several more packages that updated in the snapshot. Among some of those packages update were apparmor 3.0.3, ipset 7.15, nodejs16 16.6.2, openvpn 2.5.3, vim 8.2.3318, pipewire 0.3.33 and yast2-users 4.4.6, which made an update to allow for the editing of the name of an existing user and another update to remove the password of an existing user.
openqa-cli cheat sheet
openqa-cli is a command-line utility for interacting with openQA. The tool is versatile and allows you to control and interact with an arbitrary openQA instance from the comfort of your command line. While the internal help is quiet comprehensive, I list some of the most basic tasks in the form of a tutorial or knowledge base here.
S.u.S.E., Opensuse and me
Recently connect.opensuse.org, the openSUSE member directory and social site was shut down. You can read more about the reasons on openSUSE News. I also had my profile on the site, listing many of the things I worked on during the past two and a half decades. Reading it was quite a trip down the memory lane. It also reminded me, how the name changed over the years. Did you know that SUSE was originally an acronym for Software- und System-Entwicklung? This is why the original name is S.u.S.E.
- S.u.S.E. user from 1996, starting with version 4.3 (4.2 was the first “real” release)
- wrote a couple of articles about S.u.S.E. Linux in various Hungarian magazines
- became a S.u.S.E. beta tester when beta releases were sent by post on a pile of CD-s
- was part of the openSUSE tester team and still have a wonderful t-shirt somewhere
- did lots of PowerPC testing and fixing while working at Genesi
- compiled PowerPC packages for Packman
- became an openSUSE ambassador for Hungary, organizing events, spreading the word at conferences
- worked on the ARM port of openSUSE using hardware from Genesi
- became syslog-ng package co-maintainer and later maintainer
The beginnings
As also mentioned in an opensource.com article, I started using Linux in 1994 during my first year of university. I tried quite a few distributions, but when I discovered my /etc/passwd file printed in the Russian student’s computer lab, I quickly installed Jurix a rolling Linux distro, which was among the firsts to feature shadow passwords. These foreign students were constantly attacking our servers, but as they were paying students, they could not be punished. They even tried to bribe me with a counterfeit game CD to get an account. Thanks to them I shifted my focus to IT security. Using a distro with a strong focus on security was important. When the maintainer of Jurix joined S.u.S.E. and helped to roll out their first own Linux distro based on Jurix, S.u.S.E. Linux 4.2 (their earlier releases were simply Slackware with German localization), it was a logical next step to try it.
When I asked for a review copy, instead of 4.2 I received an early beta of the 4.3 release. I did not only write an article for the Hungarian edition of CHIP magazine, but also provided feedback for S.u.S.E. and even gave some ideas how to work around some problems. This resulted in a good relationship both with marketing and product departments of S.u.S.E. I became a beta tester, receiving CDs and providing feedback by e-mail. I was trying to persuade them for years to install Bugzilla. First they introduced it internally, and later I also got access. Of course I also kept writing articles about various S.u.S.E. and later SuSE and SUSE releases.
openSUSE
I am an open source maniac, but I am not religious about it. I truly enjoyed that SUSE Linux also made many closed source applications or applications with proprietary licenses easily available. And the SUSE Linux kernel contained lots of non-mainline code making sure, that even cutting-edge devices work. Sometimes devices under S.u.S.E. Linux worked even better than under Windows, like my TV tuner card. The change to openSUSE was a kind of shock for me. Luckily it worked out nicely in the end. Installing the “problematic” (not fully open source) applications is still possible, even if it requires enabling an extra repository. And maintaining out of tree code became more and more difficult as the speed of Linux kernel development grew. Sticking more to main-line helped to free up resources.
Once SUSE Linux turned into openSUSE I became part of the openSUSE testing team. My focus at that time was the PowerPC platform, but I double checked everything on x86 to figure out if a bug is PowerPC specific or generic. I still have a nice t-shirt from those times. I do not wear it often any more to make sure that it does not completely wither.
A few years later I also became an openSUSE ambassador. I organized release events in Hungary, spread the word at conferences, giving talks, maintaining the openSUSE booth. I still maintain the Hungarian openSUSE facebook page, but for the past 1.5 years there were no in person events at all.
Today I work at Balabit (now officially called One Identity Hungary), the home of syslog-ng. One of my first tasks was to help Linux distros and FreeBSD to keep the syslog-ng package up-to-date. First I became a co-maintainer of the syslog-ng package in openSUSE, later I became the maintainer.
For the past 25 years I had S.u.S.E. Linux, SuSE, SUSE and openSUSE running on my desktops most of the time. The only few exceptions were when I received a new laptop and it was not supported openSUSE Leap due to using old kernels. There were two short periods, but I quickly changed back to openSUSE as soon as a major new Leap release came out with an up-to-date kernel.
What is next
I mentioned ARM and PowerPC a few times in my blog. I guess that my work at Genesi is worth a separate blog :-) But if you are curious, you can already read two of my related articles:
How to Gradient When You Can’t
While this topic isn’t anything new (the asset in question is probably a decade old) I never shared a dirty little secret about some of our symbolic assets.
UI icons in GNOME are to a major extent monochrome. They behave like text and can be rendered with various foreground colors depending on context. In a small subset of icons we use partially shaded elements. Those are done as a solid fill as well, but lowered opacity. Then can still remain recolorable at runtime.
What we don’t have is the ability to draw a gradient that remains recolorable, because we’d need more somphisticated machinery to rewrite the stops of the gradient definition. Or can we? Unless you’re reading this on Planet or in your fancy RSS reader, you can see the spinner we’ve been using for well over 7 years now:
It actually isn’t filtered particularly well in Firefox, but is nice and clean in gtk. Firefox amplifies one of the big downsides of this method, it’s quite prone to moiré. If you hover over the spinner, it reveals the nasty hack how the fade to transparency has been achieved.
Let me show you how it’s done in Inkscape. The UI is a bit of afterthought, but you can make actual objects follow a path.
- The first step will be to create our spinner in its linear form. Create a rectangle, convert it into a shape with
Ctrl+Shift+Cand subdivide one of the sides a couple of times using theAdd Nodebutton in the context menubar. - To create the etch-gradient, select every even node on the side and move them horizontally.
- Next step is to create the curve this object will follow. The easiest is to use the
Ellipseprimitive and only make it go along around 270deg rather than a full circle. - Now onto the magic. Putting shapes onto curves is done with a
pattern along curvepath effect found in thepathmenu. Despite the odd terminology, path effects can be previewed in real time and working with them is much easier than filters. Setting the source shape can be done multiple ways, but I found pasting from clipboard the easiest. If the source object is actually on canvas, the shape will remain linked and editing the source shape will result in the path effect updating on the target curve in real time, allowing iteration into perfection.
I bet there is a filter that can produce halftoning out of a gradient, but who’s brave enough to spend an evening in the filters menu.
The best thing about the spinner is that Software is now getting a lot less of it. Phillip & Milan, thank you.
Onboarding Sketches

GNOME 41 is now UI frozen, so without spoiling the release much, I’d like to share some of the explorations that led to some of the onboarding in both app space (mostly Connections) and the new Tour.

Kraft Version 0.97
Ich freue mich, die Kraft-Version 0.97 herauszugeben. In dieser Version sind wieder einige Bugfixes und Detailverbesserungen zu finden, die die Arbeit mit Kraft noch weiter erleichtern werden.
Eine neue Funktion ist, Kraft im Nur-Lesen Modus zu starten. Damit können Benutzende Dokumente zwar lesen und abgeschlossene Dokumente auch Drucken, aber nicht verändern. Somit können Anwendungen mit mehreren Arbeitsplätzen, in dem einer der „Hauptarbeitsplatz“ ist, der die Angebote und Rechnungen erstellt. Andere können die Dokumente gefahrlos einsehen.
Die Version 0.97 ist über die Download-Seite der Homepage herunterzuladen.
Wir wünschen viel Spaß und Erfolg mit Kraft.
Use local go modules
When dealing with go modules, sometimes it’s handy to test some changes from a local repository instead of using the upstream one.
Now, go programs are typically relying only on the upstream packages. Take the module file of openqa-mon as example:







