I tried the KDE Plasma 6 (beta) by using the KDE Neon Unstable Edition.
This is a quick report.
I tried that in a KVM virtual machine. I had to disable 3d graphics, or the installer showed an empty Window.
Here’s the live environment where I started the installer:
Note that it uses the Wayland session by default:
There are not many options when choosing to erase the disk:
The installation went smoothly.
Upon reboot, the login screen allows you to choose the X11 session, but Wayland is the default (that’s what I used):
Without 3D, you miss the blur and other effects; for example, you only get transparency without blurring:
Let’s enable 3D (“Display Spice”, “Listen Type = None” and check “OpenGL”, “Apply”, and then “Video Virtio”, check “3D acceleration”).
Everything seems to work this time (so the problem was only during the installation). We now have blur effects and smooth 3D effects:
The “Overview” effect (Alt+W) looks much nicer now (in the meantime, I switched to the dark theme), and it retains the features I had already blogged about:
The default Task Switcher (Thumbnail Grid) now makes sense (in Plasma 5, changing the default Task Switcher was the first thing I was doing in Plasma 5!):
From the visual point of view, you now also have a floating panel enabled by default.
There was a substantial system update (about 500Mb), which I applied. After rebooting, I was greeted like this:
Unfortunately, the links do not work: no browser opens…
After the update, logging out does not seem to work anymore: I get a blank screen. The same holds for the other menus like “Shut Down” and “Restart”. Welcome to beta software 😉
However, I did another upgrade the day after, and these issues were fixed.
By the way, if you want to upgrade the system, remember that in KDE Neon, you should not use “sudo apt upgrade” but “sudo pkcon update“.
These are the system information (remember: I’m on a virtual machine):
Speaking about desktop effects, we have the (useless but good-looking) Desktop Cube back! You have to enable it in the “Desktop Effects” and remember you must have at least 4 virtual desktops, or the effect will not kick in:
Cool effect 🙂
Speaking of the Desktop effects, the other effects seem to work fine, at least the ones I tried: Present Windows, Magic Lamp, Cover Flow (task switcher), and Blur.
In Wayland, there are some small quirks. The one I noted most is the missing close/maximize/minimize icons in Firefox (you cannot see them, though if you hover, you can press them):
This is a quick post about having nice fonts in Eclipse in Windows 11, based on my experience (maybe I had bad luck with the default configurations of Eclipse and/or Windows).
When I bought my Acer Aspire Vero, I found Windows 11 installed, and now and then, I’m using Windows 11 (though I’m using Linux most of the time). As an Eclipse user, I immediately installed Eclipse. However, I found the default fonts were really ugly:
Indeed, “Courier New” is not the most beautiful mono-space font 😉
Other applications look nice in Windows 11, including text editors. They use, by default, “Lucida Console”, which looks OK:
Indeed, Eclipse uses “Consolas” for other Text parts:
“Consolas” looks even better than “Lucida”! I changed that in Eclipse also for the standard Text font, and the result looks nice to me:
I have already blogged about Gitpod, which allows you to spin up fresh development environments from your GitHub projects so that you can code with Visual Studio on the web (that’s just a very reductive definition, so you may want to look at its website for the complete set of features). I have already shown how to use it for Ansible and Molecule.
Today, I will show how to use Gitpod for Java/Maven projects. This is the first post of a series about Java, Maven, and Gitpod.
NOTE: Although the post focuses on Gitpod, most of the features we will see come from Visual Studio Code and the extensions we will install. Thus, the same mechanisms could be used also on a locally installed Visual Studio Code. In that respect, it is best to get familiar with the main keyboard shortcuts (these will be shown in Visual Studio Code when no editor is opened):
Gitpod provides an example for Java, but it relies on Spring Boot and is probably too complex, especially if you’re not interested in web applications.
In this post, instead, I’ll start with a very basic Java/Maven project. It is intended as a tutorial, so you might want to follow along doing these steps with your GitHub account.
I start by creating a Maven project with the quickstart archetype locally on my computer:
Now, I can start Gitpod for this repository using the button (as I said, you need to use a browser extension; otherwise, you have to prefix the URL appropriately):
Let’s press the “Gitpod” button. (The first time you use Gitpod, you’ll have to accept a few authorizations.).
Press the “Continue with GitHub” button and wait for the workspace to be ready.
NOTE: I’m using the light theme of Visual Studio in Gitpod in this blog post.
Gitpod detected that this was a Maven project and automatically executed the command:
1
mvn install-DskipTests=false
Note that it also created the file “.gitpod.yml”, which we’ll later tweak to customize the default command and other things:
Moreover, it offers to install the Java extension pack:
Of course, we accept it because we want to have a fully-fledged Java IDE (this is based on the Eclipse JDT Language Server Protocol; you might want to have a look at what a Language Server Protocol, LSP, is). We use the arrow to choose “Install Do not Sync” (we don’t want that in all Gitpod workspaces, and we’ll configure the extensions for this project later).
Once that’s installed (note also the recommended extension GitLens, which we might want to install later, let’s use the gear icon to add the extension to our “.gitpod.yml” so that the extension will be automatically installed and available the next time we open Gitpod on this project:
Unfortunately, the “.gitpod.yml” is a bit messed up now (maybe a bug?), and we have to adjust it so that it looks like as follows:
There’s also a warning on top of the file; by hovering, we can see a few warnings complaining that the transitive dependencies of the extension are not part of the file:
Let’s click on “Quick Fix…” and then apply the suggestions to add the extensions to the file (these are just warnings, but I prefer not to have warnings in my development environment):
In the end, the file should look like this:
YAML
1
2
3
4
5
6
7
8
9
10
11
tasks:
- init: mvn install -DskipTests=false
vscode:
extensions:
-vscjava.vscode-java-pack
-redhat.java
-vscjava.vscode-java-debug
-vscjava.vscode-java-dependency
-vscjava.vscode-java-test
-vscjava.vscode-maven
Note that we have “code lens” in the editor, and we can choose to let Gitpod validate this configuration:
TIP: another extension I always add is “eamodio.gitlens”.
This will rebuild the Docker image for our workspace (see the terminal view at the bottom):
This operation takes some time to complete, so you might want to avoid that for the moment. If you choose to do the operation, in the end, another browser tab will be opened with this new configuration. We can switch to the new browser tab (the “.gitpod.yml” is available in the new workspace, though we still haven’t committed that).
NOTE: I find “mvn install” an anti-pattern, and, especially in this context, it makes no sense to run the “install” phase and run the tests when the workspace starts. In fact, I changed the “init” task to a simpler “mvn test-compile”; this is enough to let Maven resolve the compile and test dependencies when the workspace starts. The Java LSP will not have to resolve them again and will find them in the local Maven cache.
We can take the chance to commit the file by using the corresponding tab in Visual Studio Code and then push it to GitHub (“Sync Changes”):
We could also close the Gitpod tabs and re-open Gitpod (the “.gitpod.yml” is now saved in the GitHub repository), but let’s continue on the open workspace.
Let’s now open a Java file in our project:
We get a notification that the IDE is loading the Java project (this might take a few seconds).
TIP: to quickly open a file knowing (part of) its name, press “Ctrl + P” (see the shortcuts above) and start typing:
We have a fully-fledged Java IDE with “code lens” for running/debugging and parameter names (see the argument passed to “System.out.println”):
For example, let’s use “Run” to run the application and see the output in the terminal view:
Though this project generated by the archetype is just a starting point, we also have a simple JUnit test. Let’s open it.
After a few seconds, the editor is decorated with some “code lens” that allows us to run all the tests or a single test (see the green arrow in the editor’s left ruler). Clicking on the arrow immediately runs the tests or a single test. Right-clicking on such arrows gives us more options, like debugging the test.
On the right pane, we can select the “Testing” tab (depicted as a chemical ampoule) that shows all the tests detected in the project (in this simple example, there’s a single one, but in more complex projects, we can see all the tests). We can run/debug them from there.
Let’s run them and see the results (in this case, it is a complete success); note the decorations showing the succeeded tests (in case of failures, the decorations will be different):
Of course, we could run the tests through Maven in the console, but this would be a more manual process, and the output would be harder to interpret in case of failures: we want to use an IDE to run the tests.
We could also run the tests by pressing “F1” and typing “Run tests” (we’ll then use the command “Java: Run Tests”): we need to do that when a JUnit test case is open in the editor.
Let’s hover on the “assertTrue”, which is a static method of the JUnit library. The IDE will resolve its Javadoc and will show it on a pop-up (the “code lens” for the parameter names is also updated):
We can use the menu “Go to definition” (or Ctrl+click) to jump to our project’s source code and libraries. For example, let’s do that on “assertTrue”. We can view the method’s source code in the class “Assert” of JUnit (note that this editor is read-only, and the name of the file ends with “.class”):
Note that the “JAVA PROJECTS” in the “Explorer” shows the corresponding file. In this case, it is a file in the referred test dependency “junit-4.11.jar” in the local Maven cache (see the POM where this dependency is explicit).
Of course, we have code completion by pressing “Ctrl+Space”; when the suggestions appear, we can start typing to filter them, and substring filtering works as well (see the screenshot below where typing “asE” shows completions matching):
With ENTER, we select the proposal. In this case, if we select one “assertEquals”, which is a static method of “Assert”, upon selection, we will also have the corresponding static import automatically added to the file.
That’s all for the first post! Stay tuned for more posts on Java, Maven, and Gitpod! 🙂
This blog post will describe my Ansible role for installing the KDE Plasma desktop environment with several programs and configurations. As for the other roles I’ve blogged about, this one is tested with Molecule and Docker and can be developed with Gitpod (see the linked posts above). In particular, it is tested in Arch, Ubuntu, and Fedora.
This role is for my personal installation and configuration and is not meant to be reusable.
The role assumes that at least the basic KDE DE is already installed in the Linux distribution. The role then installs several programs I’m using daily and performs a few configurations (it also installs a few extensions I use).
At the time of writing, the role has the following directory structure, which is standard for Ansible roles tested with Molecule.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
├── defaults
│ └── main.yml
├── files
│ ├── kde-ssh
│ │ ├── askpass.sh
│ │ ├── ssh-add.desktop
│ │ ├── ssh-agent-shutdown.sh
│ │ └── ssh-agent-startup.sh
│ └── konsole
│ ├── AplumaDark.colorscheme
│ ├── Apricot.colorscheme
│ ├── Apricot.profile
│ ├── Aritim Dark.colorscheme
│ ├── Aritim Dark.profile
│ ├── BlackOnWhite.profile
│ ├── Edna.colorscheme
│ ├── Edna.profile
│ ├── GreenOnBlack.profile
│ ├── Nordic.colorscheme
│ ├── Nordic.profile
│ └── XeroLinux.profile
├── handlers
│ └── main.yml
├── LICENSE
├── meta
│ └── main.yml
├── molecule
│ ├── default
│ │ ├── molecule.yml
│ │ └── prepare.yml
│ ├── fedora
│ │ └── molecule.yml
│ ├── shared
│ │ ├── converge.yml
│ │ └── verify.yml
│ └── ubuntu
│ ├── molecule.yml
│ └── prepare.yml
├── pip
│ └── requirements.txt
├── README.md
├── requirements.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
The role has a few requirements, listed in “requirements.yml”:
YAML
1
2
3
---
collections:
- name: community.general
These requirements must also be present in playbooks using this role; my playbooks (which I’ll write about in future articles) have such dependencies in the requirements.
Let’s have a look at the main file “tasks/main.yml”, which is quite long, so I’ll show its parts and comment on the relevant parts gradually.
- name: Override spectacle package name for Ubuntu.
ansible.builtin.set_fact:
kde_spectacle: kde-spectacle
when: ansible_os_family == 'Debian'
- name: Override kvantum package name for Ubuntu.
ansible.builtin.set_fact:
kvantum: qt5-style-kvantum
when: ansible_os_family == 'Debian'
- name: Install Kde Packages
become: true
ansible.builtin.package:
state: present
name:
- kate
- "{{kde_spectacle}}"
- ark
- konsole
- dolphin
- okular
- gwenview
- yakuake
- korganizer
- kaddressbook
- kdepim-addons
- kio-gdrive
- dolphin-plugins
- plasma-systemmonitor
- kcalc
- plasma-workspace-wallpapers
- "{{kvantum}}"
# - latte-dock # it's not maintained anymore
# In Ubuntu doesn't seem to be there
# maybe it's not needed
- name: Install Kde Addons
become: true
ansible.builtin.package:
state: present
name:
-kdeplasma-addons
when: ansible_os_family != 'Debian'
This shows a few debugging details about the current Linux distribution. Indeed, the whole role has conditional tasks and variables depending on the current Linux distribution.
The file installs a few KDE programs I’m using in KDE.
The “vars/main.yml” only defines a few default variables used above:
YAML
1
2
3
4
---
# vars file for my_kde_role
kde_spectacle: spectacle
kvantum: kvantum
As seen above, a few packages have a different name in Ubuntu (Debian), which is overridden.
Then, I configure a few things in the KDE configuration (.ini) files and set a few keyboard shortcuts. The configuration should be self-explanatory.
Then, I ensure Kate is the default editor for textual files (including XML files, which otherwise, would be opened with the default browser); I also configure a few Kate preferences:
YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# In Fedora it's not installed by default
- name: Ensure xdg-mime is available
become: true
ansible.builtin.package:
state: present
name:
-xdg-utils
when: ansible_os_family == 'RedHat'
- name: Ensure xdg mime default application is set
Then, I copy a few Konsole profiles (and the corresponding color schemes, see the directory “files/konsole”) and also configure the Yakuake drop-down terminal:
The final part deals with configuring the Kwallet manager to store SSH key passphrases, which, in KDE, has always been a pain to get correctly (at least, now, I have a configuration that I know works on all the distributions mentioned above):
YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
- name: Install kwalletmanager and ksshaskpass
become: true
ansible.builtin.package:
state: present
name:
-kwalletmanager
-ksshaskpass
- name: Create autostart directory
ansible.builtin.file:
path: '~/.config/autostart'
mode: 0755
state: directory
- name: Copy ssh-add.desktop
ansible.builtin.copy:
src: "kde-ssh/ssh-add.desktop"
dest: "~/.config/autostart/"
mode: 0644
# inspired by AUR package plasma-workspace-agent-ssh
Concerning Molecule, I have several scenarios. As I said, I tested this role in Arch, Ubuntu, and Fedora, so I have a scenario for each operating system. The “default” scenario is Arch, which nowadays is my daily driver.
The reason for this is explained in my previous posts on Ansible and Molecule.
I have a similar “prepare.yml” for the default scenario, Arch.
I have nothing to verify for this role in the “verify.yml”. I just want to ensure that the Ansible role can be run (and is idempotent) in Arch, Ubuntu, and Fedora.
Of course, this is tested on GitHub Actions and can be developed directly on the web IDE Gitpod.
I hope you find this post useful for inspiration on how to use Ansible to automatize your Linux installations 🙂
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.