OpenSUSE - hpaluch/hpaluch.github.io GitHub Wiki

openSUSE notes

Fix NVidia GT218 (nouveau) support

When I installed Tumbleweed (Jun 26, 2024) with Plasma and Wayland - Wayland was extremely slow (0.5fps - mouse pointer moved every 2 seconds!).

It turned out that following package was missing (Mesa is used for 3D acceleration):

zypper in Mesa-dri-nouveau

And reboot. Both X11 was faster and Wayland was fast enough to be usable...

KDE Plasma issues

When using Tumbleweed 20240628 I encountered serious crash (Plasma + Wayland) after addition of "Disk monitor" Widget to systray - when it started, whole screen got corrupted followed by kernel freeze.

To fix it - I have to reset computer, login remotely via SSH and remove this part (you will likely to have replace number "27" with your sequence number:

--- ~/backups/plasma-org.kde.plasma.desktop-appletsrc	2024-06-30 14:42:27.361409257 +0200
+++ plasma-org.kde.plasma.desktop-appletsrc	2024-06-30 14:43:37.675844534 +0200
@@ -59,24 +59,6 @@
 highPrioritySensorIds=["cpu/cpu.*/usage"]
 totalSensors=["cpu/all/usage"]
 
-[Containments][2][Applets][27]
-immutability=1
-plugin=org.kde.plasma.systemmonitor.diskactivity
-
-[Containments][2][Applets][27][Configuration]
-CurrentPreset=org.kde.plasma.systemmonitor
-
-[Containments][2][Applets][27][Configuration][Appearance]
-chartFace=org.kde.ksysguard.linechart
-title=Hard Disk Activity
-
-[Containments][2][Applets][27][Configuration][SensorColors]
-disk/all/read=233,120,61
-disk/all/write=61,174,233
-
-[Containments][2][Applets][27][Configuration][Sensors]
-highPrioritySensorIds=["disk/all/write","disk/all/read"]
-
 [Containments][2][Applets][3]
 immutability=1
 plugin=org.kde.plasma.kickoff
@@ -118,7 +100,7 @@
 SystrayContainmentId=8
 
 [Containments][2][General]
-AppletOrder=3;4;5;6;7;19;20;24;26;27
+AppletOrder=3;4;5;6;7;19;20;24;26
 
 [Containments][8]
 activityId=
``

After above removal I was able to use KDE Plasma in Wayland mode again...

# Video codecs

To play video from YT (h264) in VLC (preinstalled) one has to switch codecs to free
Packman repository by following: https://en.opensuse.org/SDB:Installing_codecs_from_Packman_repositories

WARNING! You have to carefully follow above instructions to switch *codecs only*! There are many
stories that when one switches everything it often cuases trouble (for example Mesa breaking 3D rendering, etc...)

In my case I used these two commands:

```shell
zypper addrepo -cfp 90 'https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/' packman
# accept packman key and then:
zypper install --allow-vendor-change --from packman \
  ffmpeg gstreamer-plugins-{good,bad,ugly,libav} libavcodec vlc-codecs

Wicked

Wicked - disable NIS

Wicked by default configures Sun NIS - on each perceived configuration change. I'm not using NIS anywhere so I can disable it in:

diff -u etc/sysconfig/network/config{.orig,}
--- etc/sysconfig/network/config.orig   2024-07-24 19:35:00.190782422 +0200
+++ etc/sysconfig/network/config        2024-07-24 19:36:05.718029841 +0200
@@ -248,7 +248,7 @@
 # Defines the NIS merge policy as documented in netconfig(8) manual page.
 # Set to "" to disable NIS configuration.
 #
-NETCONFIG_NIS_POLICY="auto"
+NETCONFIG_NIS_POLICY=""
 
 ## Type:        string(yes,no,)
 ## Default:     "yes"

Wicked - still reloading configuration

Thanks to installing sysstat package and running pidstat -l 10 - I quickly found that on IPv6 network Wicked reloads whole configuraiton on each RA (Router Announcement) packget - which is waste of resources.

Wicked - private IPv6

openSUSE (and Linux) in general prefer to spill your unique MAC address to whole Internet (it is because permanent IPv6 address is required for Servers and some other specific cases). But for typical (Workstation) use we should definitely switch to temporary random IPv6 address (this address is even rotated in time).

To ensure that temporary IPv6 address is preferred we have to follow: https://en.opensuse.org/SDB:Native_IPv6#On_the_command_line

In my case I created file /etc/sysconfig/network/ifsysctl-eth0 with contents:

# prefer random IPv6 address
# https://en.opensuse.org/SDB:Native_IPv6#On_the_command_line
net.ipv6.conf.eth0.use_tempaddr = 2

It is strongly recommended to use any of public IPv6 test websites to verify that temporary address is really used (last 3 bytes should NOT match your MAC address, but be different).

Network Manager

Network Manager - private IPv6

Most Linux distributions use MAC based IPv6 address by default which is bad for privacy, because MAC address is generally unique and there exists even Vendor database (network card vendors get unique prefix for their MAC addresses).

If using NetworkManager we have to follow: https://wiki.archlinux.org/title/IPv6 to prefer private (temporary IPv6 address):

  • I created file /etc/NetworkManager/conf.d/60-ip6-privacy.conf with contents:
    [connection]
    ipv6.ip6-privacy=2
  • and reboot system
  • after reboot visit, for example: https://test-ipv6.com/ (javascript required) and check that IPv6 address does not contains MAC address.

Network Manager - avoid connection checks

Network manager polls openSUSE DNS servers (connect.opensuse.org) every few seconds just to show right connection icon. To disable it create file /etc/NetworkManager/conf.d/50-disable-connectivity-check.conf with contents:

[connectivity]
interval=0

And reboot.

Crashing chromium

New problem under LEAP 15.6

From dmesg:

chrome[7685]: segfault at 2005025 ip 000055cc65415994 sp 00007ffe52fd94b0 error 6 in chrome[55cc5e603000+ba1a000] likely on CPU 0 (core 0, socket 0)
Code: 8b 07 45 31 f6 3d 00 04 00 00 44 0f 42 f0 e8 33 00 00 00 8b 43 10 8b 4b 18 0f b6 c0 c1 e0 0c 0f b6 c9 c1 e1 14 09 c1 44 09 f1 <c6> 01 00 41 81 e6 ff 0f 00 00 41 c6 06 00 bf 01 00 00 00 e8 64 fe
filter_IN_public_REJECT: IN=eth0 OUT= MAC=01:00:5e:00:00:01:c0:06:c3:b9:6e:41:08:00 SRC=192.168.0.1 DST=224.0.0.1 LEN=36 TOS=0x00 PREC=0x00 TTL=1 ID=0 DF PROTO=2 
chrome[8442]: segfault at e005025 ip 000055cc65415994 sp 00007ffe52fd4e70 error 6 in chrome[55cc5e603000+ba1a000] likely on CPU 1 (core 1, socket 0)
Code: 8b 07 45 31 f6 3d 00 04 00 00 44 0f 42 f0 e8 33 00 00 00 8b 43 10 8b 4b 18 0f b6 c0 c1 e0 0c 0f b6 c9 c1 e1 14 09 c1 44 09 f1 <c6> 01 00 41 81 e6 ff 0f 00 00 41 c6 06 00 bf 01 00 00 00 e8 64 fe

Installed:

sudo zypper in gdb
# exact version from gdb
sudo zypper --plus-content debug install chromium-debuginfo-126.0.6478.182-bp156.2.11.1.x86_64

Then trying:

cd /usr/lib64/chromium
export LD_LIBRARY_PATH=`pwd`
gdb ./chrome

Reading symbols from ./chrome...
Reading symbols from /usr/lib/debug/usr/lib64/chromium/chrome-126.0.6478.182-bp156.2.11.1.x86_64.debug...
...

Then in GDB I decided to postpone installation of glibc symbols...

Thread 1 "chrome" received signal SIGSEGV, Segmentation fault.
0x000055555e60132d in base::internal::WeakReference::IsValid() const ()
... missing debuinfo omitted ...
#0  0x000055555e60132d in base::internal::WeakReference::IsValid() const ()
#1  0x0000555559c4bad9 in __gnu_cxx::__normal_iterator<base::internal::CheckedObserverAdapter*, std::vector<base::internal::CheckedObserverAdapter, std::allocator<base::internal::CheckedObserverAdapter> > > std::__find_if<__gnu_cxx::__normal_iterator<base::internal::CheckedObserverAdapter*, std::vector<base::internal::CheckedObserverAdapter, std::allocator<base::internal::CheckedObserverAdapter> > >, __gnu_cxx::__ops::_Iter_pred<base::internal::ProjectedUnaryPredicate<base::ObserverList<base::BatteryStateSampler::Observer, false, true, base::internal::CheckedObserverAdapter>::RemoveObserver(base::BatteryStateSampler::Observer const*)::{lambda(auto:1 const&)#1}, std::identity>(base::ObserverList<base::BatteryStateSampler::Observer, false, true, base::internal::CheckedObserverAdapter>::RemoveObserver(base::BatteryStateSampler::Observer const*)::{lambda(auto:1 const&)#1}&, std::identity&)::{lambda(auto:1&&)#1}> >(__gnu_cxx::__normal_iterator<base::internal::CheckedObserverAdapter*, std::vector<base::internal::CheckedObserverAdapter, std::allocator<base::internal::CheckedObserverAdapter> > >, __gnu_cxx::__normal_iterator<base::internal::CheckedObserverAdapter*, std::vector<base::internal::CheckedObserverAdapter, std::allocator<base::internal::CheckedObserverAdapter> > >, __gnu_cxx::__ops::_Iter_pred<base::internal::ProjectedUnaryPredicate<base::ObserverList<base::BatteryStateSampler::Observer, false, true, base::internal::CheckedObserverAdapter>::RemoveObserver(base::BatteryStateSampler::Observer const*)::{lambda(auto:1 const&)#1}, std::identity>(base::ObserverList<base::BatteryStateSampler::Observer, false, true, base::internal::CheckedObserverAdapter>::RemoveObserver(base::BatteryStateSampler::Observer const*)::{lambda(auto:1 const&)#1}&, std::identity&)::{lambda(auto:1&&)#1}>, std::random_access_iterator_tag) ()
#2  0x0000555559c4636a in base::ObserverList<base::BatteryStateSampler::Observer, false, true, base::internal::CheckedObserverAdapter>::RemoveObserver(base::BatteryStateSampler::Observer const*) ()
#3  0x0000555560ec1377 in autofill::AlternativeStateNameMapUpdater::~AlternativeStateNameMapUpdater() ()
#4  0x0000555560ec149e in autofill::AlternativeStateNameMapUpdater::~AlternativeStateNameMapUpdater() ()
#5  0x0000555560eb6c22 in autofill::AddressDataManager::~AddressDataManager() ()
#6  0x0000555560eb6ffe in autofill::AddressDataManager::~AddressDataManager() ()
#7  0x0000555560e23c32 in autofill::PersonalDataManager::~PersonalDataManager() ()
#8  0x0000555560e23d7e in autofill::PersonalDataManager::~PersonalDataManager() ()
#9  0x000055555f9e7664 in KeyedServiceFactory::Disassociate(void*) ()
#10 0x000055555f9e78a2 in KeyedServiceFactory::ContextDestroyed(void*) ()
#11 0x000055555f9e5f8c in DependencyManager::PerformInterlockedTwoPhaseShutdown(DependencyManager*, void*, DependencyManager*, void*) ()
#12 0x000055555e21ae71 in ProfileImpl::~ProfileImpl() ()
#13 0x000055555e21b0be in ProfileImpl::~ProfileImpl() ()
#14 0x000055555e21e907 in ProfileDestroyer::DestroyOriginalProfileNow(std::unique_ptr<Profile, std::default_delete<Profile> >) ()
#15 0x000055555e21f5d4 in OriginalProfileDestroyer::DoDestroyUnderlyingProfile() ()
#16 0x000055555e21e03a in ProfileDestroyer::Start(std::set<content::RenderProcessHost*, std::less<content::RenderProcessHost*>, std::allocator<content::RenderProcessHost*> > const&) ()
#17 0x000055555e21dad7 in ProfileDestroyer::DestroyOriginalProfileWhenAppropriateWithTimeout(std::unique_ptr<Profile, std::default_delete<Profile> >, base::TimeDelta) ()
#18 0x000055555e21d971 in ProfileDestroyer::DestroyOriginalProfileWhenAppropriate(std::unique_ptr<Profile, std::default_delete<Profile> >) ()
#19 0x000055555e229844 in ProfileManager::ProfileInfo::~ProfileInfo() ()
#20 0x000055555e22bd52 in std::_Rb_tree<base::FilePath, std::pair<base::FilePath const, std::unique_ptr<ProfileManager::ProfileInfo, std::default_delete<ProfileManager::ProfileInfo> > >, std::_Select1st<std::pair<base::FilePath const, std::unique_ptr<ProfileManager::ProfileInfo, std::default_delete<ProfileManager::ProfileInfo> > > >, std::less<base::FilePath>, std::allocator<std::pair<base::FilePath const, std::unique_ptr<ProfileManager::ProfileInfo, std::default_delete<ProfileManager::ProfileInfo> > > > >::_M_erase(std::_Rb_tree_node<std::pair<base::FilePath const, std::unique_ptr<ProfileMana
ger::ProfileInfo, std::default_delete<ProfileManager::ProfileInfo> > > >*) ()
#21 0x000055555e22baf7 in ProfileManager::~ProfileManager() ()
#22 0x000055555e222ece in ProfileManager::~ProfileManager() ()
#23 0x000055555e030d89 in BrowserProcessImpl::StartTearDown() ()
#24 0x000055555e02f69c in ChromeBrowserMainParts::PostMainMessageLoopRun() ()
#25 0x000055555e4baa69 in ChromeBrowserMainPartsLinux::PostMainMessageLoopRun() ()
#26 0x000055555c150e08 in content::BrowserMainLoop::ShutdownThreadsAndCleanUp() ()
#27 0x000055555c152bb2 in content::BrowserMainRunnerImpl::Shutdown() ()
#28 0x000055555c14dc41 in content::BrowserMain(content::MainFunctionParams) ()
#29 0x000055555da416b6 in content::RunBrowserProcessMain(content::MainFunctionParams, content::ContentMainDelegate*) ()
#30 0x000055555da42b09 in content::ContentMainRunnerImpl::RunBrowser(content::MainFunctionParams, bool) ()
#31 0x000055555da4292a in content::ContentMainRunnerImpl::Run() ()
#32 0x000055555da40287 in content::RunContentProcess(content::ContentMainParams, content::ContentMainRunner*) ()
#33 0x000055555da408a7 in content::ContentMain(content::ContentMainParams) ()
#34 0x0000555559a90614 in ChromeMain ()
#35 0x00007ffff3040eec in __libc_start_call_main () at /lib64/libc.so.6
#36 0x00007ffff3040fb5 in __libc_start_main_impl () at /lib64/libc.so.6
#37 0x0000555559550021 in _start () at ../sysdeps/x86_64/start.S:115

Reported here:

Sudo asks for root's password

Normally sudo(8) asks for user's (user that invokes sudo(8)) password. But not in openSUSE - it will ask for root's password (tested on openSUSE LEAP 15.6). Cause is explained on https://forums.opensuse.org/t/why-sudo-asking-for-root-password/52106/7 - it is because this line in /etc/sudoers

Defaults targetpw   # ask for the password of the target user i.e. root

To restore standard behavior, run visudo and comment out above line.

⚠️ **GitHub.com Fallback** ⚠️