Four days ago, the well-known Gnome environment came with a new release.
I guess it will be implemented in Fedora distro soon.
tutorials, tips, tricks, commands, programming, linux, windows, database, sql, python, programming language, Fedora, drawing, painting, tutorial, tutorials
Four days ago, the well-known Gnome environment came with a new release.
I guess it will be implemented in Fedora distro soon.
In this tutorial I will show you how can easy learn with a simple example to have a better Fedora distro with SELinux.
SELinux uses a policy store to keep track of its loaded policy modules and related settings.
You can see my active policy store name is MLS.
[root@desk mythcat]# sestatus | grep Loaded
Loaded policy name: mls
I want to create policy in the most easy way to denny memory.
I can use many way to do that or find it on SELinux.
If you want to deny user domains applications to map a memory region as both executable and writable you can use deny_execmem.
This is dangerous and the executable should be reported in bugzilla and is is enabled by default.
You must turn on the deny_execmem boolean.
setsebool -P deny_execmem 1
Let's use it:
[root@desk mythcat]# setsebool -P deny_execmem 1
[root@desk mythcat]# ausearch -c 'Web Content' --raw | audit2allow -M my-WebContent
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i my-WebContent.pp
[root@desk mythcat]# semodule -X 300 -i my-WebContent.pp
Let's see if this SELinux is currently loaded:
[root@desk mythcat]# semodule -l | grep Web
my-WebContent
[mythcat@desk ~]$ cd Python-3.5.10/
[mythcat@desk Python-3.5.10]$ ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for python3.5... no
checking for python3... python3
checking for --enable-universalsdk... no
...
The next command is make:
[mythcat@desk Python-3.5.10]$ make
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
-Werror=declaration-after-statement -I. -I./Include -DPy_BUILD_CORE -o Programs/python.o
./Programs/python.c
...
# On Darwin, always use the python version of the script, the shell
# version doesn't use the compiler customizations that are provided
# in python (_osx_support.py).
if test `uname -s` = Darwin; then \
cp python-config.py python-config; \
fi
Then I used make test.
[mythcat@desk Python-3.5.10]$ make test
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers
Python build finished successfully!
...
For the last part I used this command:
[mythcat@desk Python-3.5.10]$ sudo make install
...
The result of this is ...
[mythcat@desk Python-3.5.10]$ ls
aclocal.m4 config.sub Include Mac Modules platform python README
build configure install-sh Makefile Objects Programs Python setup.py
config.guess configure.ac Lib Makefile.pre Parser pybuilddir.txt python-config Tools
config.log Doc libpython3.5m.a Makefile.pre.in PC pyconfig.h python-config.py
config.status Grammar LICENSE Misc PCbuild pyconfig.h.in python-gdb.py
[mythcat@desk Python-3.5.10]$ ./python
Python 3.5.10 (default, Sep 6 2020, 22:32:07)
[GCC 10.2.1 20200723 (Red Hat 10.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
...
dnf install gtk3-devel
The Fedora team come with a group install with many feature.
#dnf -y groupinstall "Development Tools"
I test with these examples:
#include
int main(int argc,
char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello World");
gtk_widget_show (window);
gtk_main ();
return 0;
}
This create a simple window with Hello World title.
#include
static void on_window_closed(GtkWidget * widget, gpointer data)
{
gtk_main_quit();
}
int main(int argc, char * argv[])
{
GtkWidget * window, * label;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect( window, "destroy", G_CALLBACK(on_window_closed), NULL);
label = gtk_label_new("Hello, World!");
gtk_container_add(GTK_CONTAINER(window), label);
gtk_widget_show(label);
gtk_widget_show(window);
gtk_main();
return 0;
}
This is the same example but you will see a label with te text Hello, World!.#include
const char *password = "mythcat";
// close the window application
void closeApp(GtkWidget *widget, gpointer data)
{
gtk_main_quit();
}
// show text when you click on button
void button_clicked(GtkWidget *button, gpointer data)
{
const char *password_text = gtk_entry_get_text(GTK_ENTRY((GtkWidget *)data));
if(strcmp(password_text, password) == 0)
printf("Access granted for user: \"%s\"\n",password);
else
printf("Access denied!\n");
}
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *label1, *label2, *label3;
GtkWidget *hbox;
GtkWidget *vbox;
GtkWidget *ok_button;
GtkWidget *password_entry;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Labels, password with one button and layout");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(closeApp), NULL);
label1 = gtk_label_new("Catalin");
label2 = gtk_label_new("George");
label3 = gtk_label_new("Festila");
password_entry = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);
ok_button = gtk_button_new_with_label("OK");
g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(button_clicked),password_entry);
hbox = gtk_box_new(FALSE, 1);
vbox = gtk_box_new(TRUE, 2);
gtk_box_pack_start(GTK_BOX(vbox), label1, TRUE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), label2, TRUE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(hbox), label3, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), ok_button, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), password_entry, TRUE, FALSE, 5);
gtk_container_add(GTK_CONTAINER(window), hbox);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
The result can be seen in the following image:[mythcat@desk ~]$ gcc test.c $(pkg-config --cflags --libs gtk+-3.0) -o test
[mythcat@desk ~]$ ./test
SELinux user | Description | Used for |
---|---|---|
unconfined_u | SELinux user meant for unrestricted users. Unconfined users have hardly any restrictions in a SELinux context and are meant for systems where only Internet-facing services should run confined (i.e. the targeted SELinux policy store). | All users on a targeted system |
root | The SELinux user meant for the root account | The Linux root account |
sysadm_u | SELinux user with direct system administrative role assigned | Linux accounts that only perform administrative tasks |
staff_u | SELinux user for operators that need to run both non-administrative commands (through the staff_r role) and administrative commands (through the sysadm_r role).
|
Linux accounts used for both end user usage as well as administrative tasks |
user_u | SELinux user for non-privileged accounts | Unprivileged Linux accounts |
system_u | Special SELinux user meant for system services | Not used directly |
[root@desk mythcat]# semanage login --modify --seuser staff_u --range s2:c100 mythcat
[root@desk mythcat]# semanage login --modify --seuser staff_u --range s0-s15:c0.c1023 mythcat
[root@desk mythcat]# semanage login -l
[root@desk mythcat]# setenforce enforcing
[root@desk mythcat]# getenforce
Enforcing
[root@desk mythcat]# semanage login -l
ValueError: Cannot read policy store.
After reboot need some time to load the new changes, first is the last configuration.
[mythcat@desk ~]$ semanage login -l
ValueError: SELinux policy is not managed or store cannot be accessed.
[mythcat@desk ~]$ id -Z
staff_u:staff_r:staff_t:s0-s15:c0.c1023
[mythcat@desk ~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: mls
Current mode: permissive
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: denied
Memory protection checking: actual (secure)
Max kernel policy version: 33
Few seconds later all is good:
[mythcat@desk ~]$ sudo su
[sudo] password for mythcat:
bash: /root/.bashrc: Permission denied
bash-5.0# ls
bash-5.0# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: mls
Current mode: enforcing
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: denied
Memory protection checking: actual (secure)
Max kernel policy version: 33
bash-5.0# id -Z
staff_u:staff_r:staff_t:s0-s15:c0.c1023
bash-5.0# exit
exit
[mythcat@desk ~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: mls
Current mode: enforcing
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: denied
Memory protection checking: actual (secure)
Max kernel policy version: 33
Everything is fine for now, this delay is the reason for using the selinux kernel settings.
More information about Multi-Level Security and Multi-Category Security can be found on this webpage.
[root@desk mythcat]# dnf install gdm
...
Complete!
[root@desk mythcat]# systemctl disable lightdm
[root@desk mythcat]# systemctl enable gdm
Failed to enable unit: File /etc/systemd/system/display-manager.service already exists and is a symlink to /usr/lib/systemd/system/sddm.service.
[root@desk mythcat]# systemctl disable sddm.service
Removed /etc/systemd/system/display-manager.service.
[root@desk mythcat]# systemctl enable gdm
Created symlink /etc/systemd/system/display-manager.service → /usr/lib/systemd/system/gdm.service.
[root@desk mythcat]# reboot
If you have problems with gdm display manager then you can read about settings here.[root@desk mythcat]# cat /etc/gdm/custom.conf
# GDM configuration storage
[daemon]
# Uncomment the line below to force the login screen to use Xorg
#WaylandEnable=false
AutomaticLogin=mythcat
AutomaticLoginEnable=False
[security]
[xdmcp]
[chooser]
[debug]
# Uncomment the line below to turn on debugging
#Enable=true
[root@desk mythcat]# dnf -y update
...
[mythcat@desk ~]$ cp Downloads/LibreOffice_7.0.0_Linux_x86-64_rpm.tar.gz ~
[mythcat@desk ~]$ ls LibreOffice*
LibreOffice_7.0.0_Linux_x86-64_rpm.tar.gz
[mythcat@desk ~]$ tar xvf LibreOffice_7.0.0_Linux_x86-64_rpm.tar.gz
LibreOffice_7.0.0.3_Linux_x86-64_rpm/
LibreOffice_7.0.0.3_Linux_x86-64_rpm/RPMS/
...
[mythcat@desk ~]$ cd LibreOffice_7.0.0.3_Linux_x86-64_rpm/
[mythcat@desk LibreOffice_7.0.0.3_Linux_x86-64_rpm]$ cd RPMS/
[mythcat@desk RPMS]$ sudo dnf install *.rpm
[sudo] password for mythcat:
Last metadata expiration check: 2:09:12 ago on Sat 22 Aug 2020 10:33:11 PM EEST.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
libobasis7.0-base x86_64 7.0.0.3-3 @commandline 1.8 M
libobasis7.0-calc x86_64 7.0.0.3-3 @commandline 9.5 M
libobasis7.0-core x86_64 7.0.0.3-3 @commandline 101 M
libobasis7.0-draw x86_64 7.0.0.3-3 @commandline 6.1 k
libobasis7.0-en-US x86_64 7.0.0.3-3 @commandline 88 k
...
Complete!
The last step is to run this software from Fedora 32 distro desktop environment.
[mythcat@desk ~]$ sudo systemctl get-default
[sudo] password for mythcat:
multi-user.target
[mythcat@desk ~]$ sudo systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
Restart your Fedora distro and use it.
[root@desk mythcat]# dnf install chrony
...
[root@desk mythcat]# vim /etc/chrony.conf
With the vim tool now you can add the
In most cases, it's best to use pool.ntp.org to find an NTP server or use servers from your country.
Now, I can start and enable the daemons named chronyd and add it to the firewall.
[root@desk mythcat]# systemctl start chronyd
[root@desk mythcat]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor p>
Active: active (running) since Sat 2020-08-15 12:23:08 EEST; 9h ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 10071 (chronyd)
Tasks: 1 (limit: 11800)
Memory: 1.0M
CPU: 93ms
CGroup: /system.slice/chronyd.service
└─10071 /usr/sbin/chronyd
Aug 15 12:23:08 desk systemd[1]: Starting NTP client/server...
Aug 15 12:23:08 desk chronyd[10071]: chronyd version 3.5 starting (+CMDMON +NTP>
Aug 15 12:23:08 desk chronyd[10071]: Frequency -13.819 +/- 0.344 ppm read from >
Aug 15 12:23:08 desk chronyd[10071]: Using right/UTC timezone to obtain leap se>
Aug 15 12:23:08 desk systemd[1]: Started NTP client/server.
Aug 15 12:23:13 desk chronyd[10071]: Selected source 78.96.7.25
Aug 15 12:23:13 desk chronyd[10071]: System clock TAI offset set to 37 seconds
[root@desk mythcat]# systemctl enable chronyd
[root@desk mythcat]# firewall-cmd --add-service=ntp --permanent
success
[root@desk mythcat]# firewall-cmd --reload
success
You can use it with chronyc command tool:
[root@desk mythcat]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ blackmamba-g0.eff.ro 3 10 377 692 -1192us[-1273us] +/- 92ms
^+ corporate1.bluepink.ro 2 10 377 200 -1441us[-1441us] +/- 52ms
^+ static-5-2-155-141.rdsne> 2 10 377 468 +1622us[+1540us] +/- 51ms
^* dummy.upcnet.ro 2 10 377 435 -1221us[-1303us] +/- 57ms
[root@desk mythcat]# chronyc tracking
Reference ID : 4E600719 (dummy.upcnet.ro)
Stratum : 3
Ref time (UTC) : Sat Aug 15 19:06:18 2020
System time : 0.000439648 seconds fast of NTP time
Last offset : -0.000081712 seconds
RMS offset : 0.000591977 seconds
Frequency : 13.753 ppm slow
Residual freq : -0.000 ppm
Skew : 0.235 ppm
Root delay : 0.069966756 seconds
Root dispersion : 0.017129980 seconds
Update interval : 1036.2 seconds
Leap status : Normal
[root@desk mythcat]# chronyc activity
200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
[mythcat@desk ~]$ sudo dnf copr enable @dotnet-sig/dotnet
[sudo] password for mythcat:
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.
The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
,
and packages are not held to any quality or security level.
Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.
Do you really want to enable copr.fedorainfracloud.org/@dotnet-sig/dotnet? [y/N]: y
Repository successfully enabled.
Install the .NET Core package:
[mythcat@desk ~]$ sudo dnf install dotnet
Copr repo for dotnet owned by @dotnet-sig 42 kB/s | 59 kB 00:01
Dependencies resolved.
=================================================================================
Package Arch Version Repository Size
=================================================================================
Installing:
dotnet x86_64 3.1.106-1.fc32 updates 11 k
Installing dependencies:
aspnetcore-runtime-3.1 x86_64 3.1.6-1.fc32 updates 6.2 M
aspnetcore-targeting-pack-3.1 x86_64 3.1.6-1.fc32 updates 945 k
dotnet-apphost-pack-3.1 x86_64 3.1.6-1.fc32 updates 70 k
dotnet-host x86_64 3.1.6-1.fc32 updates 104 k
dotnet-hostfxr-3.1 x86_64 3.1.6-1.fc32 updates 164 k
dotnet-runtime-3.1 x86_64 3.1.6-1.fc32 updates 27 M
dotnet-sdk-3.1 x86_64 3.1.106-1.fc32 updates 41 M
dotnet-targeting-pack-3.1 x86_64 3.1.6-1.fc32 updates 1.8 M
dotnet-templates-3.1 x86_64 3.1.106-1.fc32 updates 1.8 M
netstandard-targeting-pack-2.1 x86_64 3.1.106-1.fc32 updates 1.3 M
Transaction Summary
=================================================================================
Install 11 Packages
Total download size: 79 M
Installed size: 298 M
Is this ok [y/N]:
...
Use this tutorial to install Visual Studio Code.
Press Ctr-P keys to install the C# extension by OmniSharp.
ext install ms-dotnettools.csharp
The last step is to create a application HelloWorld:
[mythcat@desk ~]$ dotnet new console -o HelloWorld
Welcome to .NET Core 3.1!
---------------------
SDK Version: 3.1.106
----------------
Explore documentation: https://aka.ms/dotnet-docs
Report issues and find source on GitHub: https://github.com/dotnet/core
Find out what's new: https://aka.ms/dotnet-whats-new
Learn about the installed HTTPS developer cert: https://aka.ms/aspnet-core-https
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs
Write your first app: https://aka.ms/first-net-core-app
--------------------------------------------------------------------------------------
Getting ready...
The template "Console Application" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on HelloWorld/HelloWorld.csproj...
Restore completed in 119.48 ms for /home/mythcat/HelloWorld/HelloWorld.csproj.
Restore succeeded.
You can run it with dotnet run command:
[mythcat@desk ~]$ cd HelloWorld/
[mythcat@desk HelloWorld]$ ls
HelloWorld.csproj obj Program.cs
[mythcat@desk HelloWorld]$ dotnet run Program.cs
Hello World!
[mythcat@desk ~]$ sudo dnf update --refresh
[sudo] password for mythcat:
Fedora 32 openh264 (From Cisco) - x86_64 1.1 kB/s | 986 B 00:00
Fedora Modular 32 - x86_64 39 kB/s | 22 kB 00:00
Fedora Modular 32 - x86_64 - Updates 26 kB/s | 22 kB 00:00
Fedora 32 - x86_64 - Updates 10 kB/s | 9.8 kB 00:00
Fedora 32 - x86_64 20 kB/s | 23 kB 00:01
google-chrome 7.6 kB/s | 1.3 kB 00:00
MEGAsync 4.7 kB/s | 1.5 kB 00:00
MongoDB Repository 4.4 kB/s | 2.5 kB 00:00
RPM Fusion for Fedora 32 - Free - Updates 21 kB/s | 9.1 kB 00:00
RPM Fusion for Fedora 32 - Free 25 kB/s | 10 kB 00:00
RPM Fusion for Fedora 32 - Nonfree - Updates 20 kB/s | 9.3 kB 00:00
RPM Fusion for Fedora 32 - Nonfree 18 kB/s | 10 kB 00:00
Visual Studio Code 6.6 kB/s | 3.0 kB 00:00
Dependencies resolved.
Nothing to do.
Complete!
[mythcat@desk ~]$ sudo dnf install steam -y
Last metadata expiration check: 0:00:09 ago on Sun 02 Aug 2020 04:59:49 PM EEST.
Package steam-1.0.0.64-1.fc32.i686 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[mythcat@desk ~]$ steam
Running Steam on fedora 32 64-bit
STEAM_RUNTIME is enabled automatically
Pins potentially out-of-date, rebuilding...
...
Now you can pick a game from store steam and play it.
[mythcat@desk TLauncher]$ ls
README-EN.txt README-RUS.txt TLauncher-2.72.jar
[mythcat@desk TLauncer]$ sudo su
[root@desk TLauncher]# dnf list java* | grep openjdk-devel
java-latest-openjdk-devel.x86_64 1:14.0.1.7-2.rolling.fc32 @updates
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.262.b10-1.fc32 updates
java-1.8.0-openjdk-devel-slowdebug.i686 1:1.8.0.262.b10-1.fc32 updates
java-1.8.0-openjdk-devel-slowdebug.x86_64 1:1.8.0.262.b10-1.fc32 updates
java-11-openjdk-devel.i686 1:11.0.8.10-2.fc32 updates
java-11-openjdk-devel.x86_64 1:11.0.8.10-2.fc32 updates
java-11-openjdk-devel-slowdebug.x86_64 1:11.0.8.10-2.fc32 updates
java-latest-openjdk-devel.i686 1:14.0.1.7-2.rolling.fc32 updates
java-latest-openjdk-devel-slowdebug.x86_64 1:14.0.1.7-2.rolling.fc32 updates
[root@desk TLauncher]# dnf install java-11-openjdk.x86_64
Last metadata expiration check: 0:09:17 ago on Tue 28 Jul 2020 09:33:24 PM EEST.
Dependencies resolved.
=====================================================================================================================
Package Architecture Version Repository Size
=====================================================================================================================
Installing:
java-11-openjdk x86_64 1:11.0.8.10-2.fc32 updates 251 k
Installing dependencies:
java-11-openjdk-headless x86_64 1:11.0.8.10-2.fc32 updates 38 M
ttmkfdir x86_64 3.0.9-58.fc32 fedora 58 k
xorg-x11-fonts-Type1 noarch 7.5-24.fc32 fedora 500 k
Transaction Summary
=====================================================================================================================
Install 4 Packages
Total download size: 39 M
Installed size: 173 M
Is this ok [y/N]: y
...
[root@desk TLauncher]# sudo alternatives --config java
There are 4 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /opt/jdk1.8.0_232/bin/java
2 /opt/jdk1.8.0_201/bin/java
*+ 3 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.fc32.x86_64/jre/bin/java)
4 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.8.10-2.fc32.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 4
[root@desk TLauncher]# export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.8.10-2.fc32.x86_64/
[root@desk TLauncher]# echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-11.0.8.10-2.fc32.x86
[root@desk TLauncher]# java -version
openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment 18.9 (build 11.0.8+10)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.8+10, mixed mode, sharing)
Now you can start the program:
[mythcat@desk TLauncher]$ sudo java -jar TLauncher-2.72.jar
-------------------------------------------------------------------
run double running protection
[Downloader2] Loaded configuration: normal
[Downloader2] Files in queue 15
[Downloader2] Starting download 15 files...
...
The last command will run the software and you will able to play the game.
#sudo dnf distro-sync --allowerasing
#dnf reinstall xorg-\* mesa\* libglvnd\*
In the following image, you can see the new upgrade works very well with my Cinnamon desktop environment.