Skip to main content

the avatar of Nathan Wolf

the avatar of Karatek's Blog

How to fix the Teamspeak Audio mute problem on Linux

In this article, I’m gonna show you how to fix tix the TeamSpeak Audio mute problem on Linux. It has been tested on my machine, you can see details below.

Part Model
Operating System OpenSUSE Tumbleweed
Desktop Environment KDE Plasma 5.20.4
Host X470 AORUS ULTRA GAMING
Kernel 5.10.1-1-default
Window Manager KWin
CPU AMD Ryzen 5 2600 (12) @ 3.400GHz
GPU NVIDIA GeForce GTX 1060 6GB
PulseAudio Version 14.0-rebootstrapped

The problem

When using TeamSpeak on Linux, you may have experienced this issue: Starting TeamSpeak mutes certain applications, such as Spotify or VLC. This is pretty annoying, especially while gaming, since you constantly have to tab out of your game, open the volume control applet and unmute the application, only to see it getting muted later. This is not a solution, so let’s fix it.

The fix

Fixing this is pretty straight forward (See the OpenSUSE Wiki). All you have to do is commenting out the line load-module module-role-cork in /etc/pulse/default.pa. If you know what you’re doing, cou can do this yourself, but I’ll give step-by-step instructions below.

Using KDE Kate

  1. Hit [Alt] + [Space].
  2. Enter kdesu kate /etc/pulse/default.pa and hit [Enter].
  3. Search for the line saying “load-module module-role-cork” (Hint: Use [Ctrl] + [F])
  4. Put a # in front of it. It should look now look like the following:
    ### Cork music/video streams when a phone stream is active
    # load-module module-role-cork
    
  5. Save the file ([Ctrl] + [S]) and close the window.
  6. Open krunner by pressing [Alt] + [Space] and type pulseaudio -k && pulseaudio --start [Enter].

Using GNOME gedit:

  1. Open a terminal window.
  2. Start a root session. On Ubuntu/Debian based systems, I recommend using sudo bash, on SUSE/RHEL based systems use su -. Enter the required password, if you are prompted to.
  3. Edit the file /etc/pulse/default.pa. For doing so, type: gedit /etc/pulse/default.pa
  4. Search for the line saying “load-module module-role-cork”
  5. Put a # in front of it. It should look now look like the following:
    ### Cork music/video streams when a phone stream is active
    # load-module module-role-cork
    
  6. Save the file ([Ctrl] + [S]) and close the window.
  7. Exit the root session by typing exit.
  8. Kill the PulseAudio Server: pulseaudio -k
  9. Start it again: pulseaudio --start

Using the terminal (universal method)

  1. Open a terminal window. On KDE Plasma, this is done by opening the Kickstarter Menu and searching for “Konsole”.
  2. Start a root session. On Ubuntu/Debian based systems, I recommend using sudo -s, on SUSE/RHEL based systems use su -. Enter the required password, if you are prompted to.
  3. Edit the file /etc/pulse/default.pa. For doing so, type: vim /etc/pulse/default.pa
  4. Search for the line saying “load-module module-role-cork”. For doing so, enter a /and the line afterwards, so /load-module module-role-cork. See this wiki entry for more help regarding searching in VIM.
  5. Enter editing mode by hitting the key i on the keyboard. Now you will be able to edit the text file.
  6. Now out comment the line by putting a # in front of it. It should now look like the following:
    ### Cork music/video streams when a phone stream is active
    # load-module module-role-cork
    
  7. Now hit escape in order to exit editing mode and type :wq and hit Enter. This will save the file and exit vim.
  8. End the root session by using exit.
  9. Kill the PulseAudio Server: pulseaudio -k
  10. Start it again: pulseaudio --start

Sources

Further Reading


a silhouette of a person's head and shoulders, used as a default avatar

GRUB, u-boot, kernels and DTB loading (on the BPi M2 Zero and others)

While I was experimenting with the BananaPi M2 Zero board, I soon needed to adopt its device tree file (dtb).

Fortunately, the friendly members of the openSUSE:Factory:ARM community quickly hinted me at the grub2 "devicetree" command which can be specified similar to "linux" or "initrd" to name a file that's loaded as device tree.

Unfortunately, there is no way to make this really persistent, short of editing the grub generator scripts which will get lost on every grub2 update.

The other option would be to decompile the board's DTB file ("/boot/dtb/sun8i-h2-plus-bananapi-m2-zero.dtb" in my case), change and then recompile it, replacing the original file. This has two downsides: first, it will get overwritten with every update of the "dtb-sun8i" package (no idea how often this will be the case) and second, you might want to have the original file as fallback ready. In general, editing package managed files is not a good idea in my book, if it can be avoided it should be.

So I looked into the "who loads which device tree file" and found out that actually the dtb is loaded by u-boot, even before grub starts. U-boot has the name of the board built-in and thus the file name it is looking for. Additionally it has a search list of directories that it searches to find the dtb file. So the simplest way to apply your own dtb file would probably be to put it, with the original file name into the search path after the original file. I tried this approach at first, but then went for explicitly specifying a different filename, which is just not as subtle in case you need to debug this years later ;-)

So the method is relatively easy:

  1. put your modified dtb file into /boot, I named it custom.dtb.
  2. boot into u-boot, interrupt booting on the serial console
  3. in u-boot console, enter setenv fdtfile custom.dtb
  4. in u-boot console, enter saveenv
That's it. Now boot and verify that your dtb file is used.

Note that the u-boot environment is saved on the EFI partition of the SD card (first partition, FAT format) as file "uboot.env". If you need to reset the environment to the built-in defaults, then you can always mount the SD card in another machine and move away or delete uboot.env.


the avatar of Nathan Wolf

a silhouette of a person's head and shoulders, used as a default avatar

openSUSE Tumbleweed on the Banana Pi BPI-M2 ZERO

This is the first post of a small series about openSUSE on the Banana Pi BPI-M2 ZERO.

Preface

I recently got myself a Banana Pi M2 Zero board while ordering other stuff at an electronics distributor. The M2 zero is the same form factor and feature set as the Raspberry Pi Zero W (the GPIO pin headers are said to be compatible, it has WiFi and Bluetooth built in and an USB OTG port). The CPU is an Allwinner H2+, a quad-core ARM processor running a 1GHz clock speed, RAM size is 512MB. Processing power is probably comparable to a Raspberry Pi 2 board.

I bought the M2 Zero to use it with an RTLSDR stick to receive the signal of my outside RF temperature sensor. This worked with the Raspberry Pi Zero W, but was a bit too much for the slower CPU which has other more important things to do anyway (playing internet radio ;-), so the M2 Zero was a cheap, more powerful alternative. The box will be running headless and thus I do not care about support for graphics and multimedia anyway.

In the end, I switched the RF receiver to a RaspyRFM board whih is using less energy and simpler to use than an RTLSDR stick just to receive some sensors and now the M2 Zero board is free for tinkering...


openSUSE on the M2 Zero

There was already an image available for the Banana Pi M2 Plus (called "sinovoipbpim2plus"), which is the "bigger brother" of the M2 zero, but that image did not boot. Experimenting with the u-boot image from armbian lead to success in "openSUSE Tumbleweed boots with armbian u-boot". Thanks to the friendly openSUSE ARM community, a matching u-boot version for the M2 Zero was built quickly and I could submit the updated image in OBS to get an image ready for the board (called "sinovoipbpim2zero").

Some small things are still to be sorted out, this is why I would suggest you use the image from the home:seife:bananapi repository for now. Since the board has only WiFi networking (more on that in a later post...), you'll need a serial console wired up for initial setup and I strongly suggest to use at least the "openSUSE-Tumbleweed-ARM-X11-..." image and not the JeOS image, since JeOS does not contain NetworkManager and using WiFi with wicked (actually using anything with wicked) is not fun.

So put the image on the SD card, connect the serial console, boot the box up. Log in as root. WiFi connection is easily established then:

nmcli dev wifi connect YOUR_SSID password YOUR_PASSWORD

That's it, have fun! ;-)



Addon note: When I started to write this post, my home:seife:bananapi repo was necessary for actually getting WiFi to work (contained a fixed kernel-firmware package). This has all been submitted to upstream or openSUSE:Factory:ARM now. All that's "special" in my repo now is a slightly extended package selection in the image (the "dtc" package is included) and a fixed config.sh script that makes NetworkManager actually work correctly, including name resolution, see boo#1180234 for details), so the image from openSUSE:Factory:ARM should be "good enough" for most uses already and in the near future I'll probably retire the home:seife:bananapi project or use it just for development stuff).

the avatar of Nathan Wolf
a silhouette of a person's head and shoulders, used as a default avatar

openSUSE Tumbleweed – Review of the week 2020/53

Dear Tumbleweed users and hackers,

The last week of 2020 has come to an end. Tumbleweed had been rolling steadily throughout the entire year and did went for the big finale of the year with a whopping 7 snapshots (1224, 1225, 1226, 1227, 1228, 1229 and 1231).

The main changes included there contained:

  • Mozilla Firefox 84.0
  • gtk+ 2.24.33: the final release of the gtk 2 series
  • Linux kernel 5.10.3
  • Ruby 3.0: rubygems have been enabled, default ruby version is still 2.7

As a lot of maintainers are busy with celebrations, the list of staging projects did not change drastically. As such, we still have these things in the works for 2021:

  • Linux kernel 5.10.4
  • icu 68.1: breaks a few things like postgresql. Staging:I
  • Multiple python 3 versions parallel installable. Adding to python 3.8, version 3.6 week be reintroduced. Python modules will be built for both versions.
  • RPM 4.16: all build issues in Staging:A have been fixed, but on upgrades, rpm seems to segfault in some cases.
  • brp-check-suse: a bug fix in how it detected dangling symlinks (it detected them, but did not fail as it was supposed to)
  • permissions package: prepares for easier listing, while supporting a full /usr merge
  • Rpmlint 2.0: experiments ongoing in Staging:M
  • openssl 3: not much progress, Staging:O still showing a lot of errors.
the avatar of Karatek's Blog

Looking back at 2020

2020 has been a tough year. The global pandemic made it possible to work very much on my personal projects, so let’s talk about that. Also some “Thank Yous” will be given.

Celebrating Nemesis Anniversary

At January 2nd, 2020, we introduced Nemesis. Nemesis is my very own Telegram group management bot, written in Python. Back then, the very popular bot BanhammerMarie went offline in favour of a closed source, proprietary alternative I did not want to use. I first wanted to clone Marie in Java, but scraped that idea soon. So I forked Marie, and over the time, some new features were introduced.

Features arrived in 2020

Patches to version 1.x

Multi Language support

Screenshot
Our first real change was support for multiple languages. In theory, it is now possible to use different languages in chats using /lang, but we do not have the translations yet. Any help is appreciated, so I you want, go ahead and check out our translation portal.

Import and Export

Screenshot
We also added support for importing settings from the proprietary bot @MissRose_bot we wanted to replace in our groups. This should make it much easier for newcomers to migrate their chats over to Nemesis. In addition, it is now possible to export some of Nemesis settings to a nice and readable .toml file.

Version 2.0

Screenshot
Later the year, the first major update of Nemesis, version 2.0, was released. This version brought a lot of new features and improvements, so let’s take a look.

Migration to python-telegram-bot 12.x and 13.x

Nemesis now completely uses version 12.x of the python-telegram-bot api. Originally written for version 11.x, this transition took a lot of time, but it allows us to keep the bot running, as using an old version of the api would make it more difficult to add new features later. Some time after, we also took the transition to 13.x, which was a lot smoother then migrating to its predecessor.

Downloading stickers and creating custom packs

Screenshot
Another new feature is the ability to download Stickers as .png files and to create your own sticker packs! Did not try it out yet? Go ahead and send /help to the bot and let it show you how to do so! It only works with static, not animated, stickers at the moment though.

Reputation system

Screenshot
Also, it is now possible to vote on messages by replying to them with + or -. You can enable this feature by typing /reputation on.

Secret messages

Screenshot
The last feature I want to mention is the possibility to send secret messages in groups, called “whispers”. In order to enable this, it was necessary to use InlineQuerys, which actually was a pretty painful process. BUt it works now, and Nemesis replaces another bot in our groups, @whisperBot, enabling me greater privacy, since I do not need to trust a third party in order to send secret messages.

Features to come in 2021

I’ve got some ideas for new features, so here they are. Any feedback is appreciated.

REST based API

Screenshot
This one is not particularly useful for the user, but enables us to build great tools based on Nemesis. Building a REST Api allows us to build applications integrated into Nemesis, such as a fully functional web based administration panel.

Leveling system

Another feature to come is leveling, similar to Combot. This way it will finally be possible to manage a group with only Nemesis, without needing another bot.

Statistics

Same as above, it will be possible to get rid of Combot and do all of the management with Nemesis. Statistics will be generated based on the time of day, the sender and the message type. The message itself won’t be saved in any way, keeping your messages private. Statistics will be disabled by default.

Performance Improvements

Currently, Nemesis is not really scalable and won’t work well if the number of users grows. In order to change that, it will be necessary to change the way the bot handels database queries and processes data, as well as optimizing it to use multiple threads and cache data in memory.

GUtilities Reloaded

In 2019, we were working on creating Minecraft plugins for a multiplayer network we wanted to call “GamelMC”. This project was later scrapped, and all the code written was archived. However, in 2020, I used some of the old code and ported one plugin to Minecraft 1.16.4. The plugin adds basic functionality to the server, such as chat formatting, chat clearing, fancy kick messages, teamchat and a lot more. The source code is available here.

Kenaten

Back in late 2019, I discovered a mobile game which some of my friends played as well. Together with @ttzug I worked on creating a bot for that game, but this project was scrapped. The project was to bulky, and the game turned out not being really good. In addition, personal reasons made me quitting that game.

Contribution to other Open Source projects

Corona Warn Companion

Screenshot This is an app which helps you better understand the warnings the official Corona-Warn-App in Germany. Let me quote from it’s README:

!!! quote The app reads the Rolling Proximity IDs recorded by your device from the Exposure Notifications database (this is only possible with root permissions, which is why official Exposure Notifications apps, such as Corona-Warn-App, cannot display these details). The app downloads the Diagnosis Keys from the official German Corona-Warn-Server and other countries’ servers, as selected by you. For Germany, it downloads the keys published daily for the last few days, and the keys published every hour for today. Only keys for the days found in step 1 are shown and counted.

However, the application was not able to read data from the FOSS version of the Corona Warn App, so I added that. Anyway, the companion app is really cool, so if your device is rooted, you should definitely check it out! Here is the link.

YaST

YaST is the installation and configuration tool for openSUSE and the SUSE Linux Enterprise distributions. It features an easy-to-use interface and powerful configuration capabilities. I just did some small bugfixes, and am pretty proud on my first contribution to a FOSS project.

Thank you!

Now its time to thank some people. First of all, huge thank you to the amazing people who keep Nemesis running. Namely:

Name Role
@GenosseSeverus Co-Owner of Nemesis
@Luna_Loony Administrator
@ttzug Support User

Speaking of GenosseSeverus, make sure to check out their Telegram Themes: Sharry Themes

Another thank you goes to Paul Larsen for building the amazing base of Nemesis.

Happy new year!


the avatar of Karatek's Blog

Androids Datenschutzeinstellungen optimieren und Android absichern

Android telefoniert in seinen Voreinstellungen doch recht viel nach Hause zu Google, dem Gerätehersteller und anderen Parteien. In diesem Artikel ist beschrieben, wie man diese “Phone-Home Funktionen” einschränken kann. Wie viel Google so überuns erfährt, zeigt dieses Zitat von Aufsichtsratchef Eric Schmidt:

With your permission you give us more information about you, about your friends, and we can improve the quality of our searches. We don’t need you to type at all. We know where you are. We know where you’ve been. We can more or less know what you’re thinking about.

Es ist also an der Zeit, diesem Datensammeln den Stecker zu ziehen.

Der sanfte Weg

Beim “sanften Weg” werden keine Modifikationen am System vorgenommen. Alle Änderungen betreffen nur den jeweils angemeldeten Benutzer und lassen sich leicht wieder ändern. Allerdings gibt es bei dieser Methode immernoch Schlupflöcher, durch die das Gerät Daten abfließen lassen könnte.

Google Einstellungen anpassen

Für die folgenden Einstellungen müssen Sie in die Einstellungen ihres Google Kontos navigieren. Gehen Sie hierzu unter Android 10 wie folgt vor:

  1. Öffnen Sie ihre Geräte Einstellungen
  2. Wählen Sie den Menüpunkt “Google” aus.
  3. Wählen Sie dann “Google-Konto verwalten” aus.
  4. Tippen Sie unter “Datenschutz & Personalisierung” auf “Daten & Personalisierung verwalten”.

Aktivitäten abschalten

Nun können Sie die eigentlichen Einstellungen ändern:

  1. Deaktivieren Sie die “Web- & App- Aktivitäten”, den “Standortverlauf” und den “YouTube-Verlauf”.
  2. Deaktivieren Sie nun personenbezogene Werbung. Öffnen Sie dazu http://google.com/ads/preferences.
  3. Entfernen Sie unter “Interessen” alle Häckchen
  4. Scrollen Sie zu “Interessenbezogene Werbung” und deaktivieren Sie den Schalter.

Ortungsfunktion deaktivieren

Nun sollte noch die Ortungsfunktion deaktiviert werden:

  1. Kehren Sie zurück zu den Google Einstellungen.
  2. Wählen Sie den Menüpunkt “Sicherheit”.
  3. Rufen Sie “Mein Gerät finden” auf.
  4. Schalten Sie den Schalter aus.

Synchronisierungseinstellungen ändern

Konten Synchronisierung abschalten

Im nächsten Schritt schalten wir die Synchronisierung aus:

  1. Öffnen Sie die Android Systemeinstellungen.
  2. Navigieren Sie zu “Konten”.
  3. Tippen Sie auf den obersten Eintrag.
  4. Deaktivieren Sie alle nicht benötigten Einträge
  5. Wiederholen Sie Schritt 3 & 4, bis Sie alle Konten abgearbeitet haben.

Google Drive Sicherungen abschalten

Nun muss noch die Sicherungsfunktion dran glauben:

  1. Navigieren Sie aus den Android Einstellungen zu System -> Sicherung
  2. Deaktivieren Sie “In Google Drive sichern”.

Google Play Protect deaktivieren

Um zu verhindern, dass all unsere Apps zu Google hochgeladen werden, führen wir noch diese Schritte aus:

  1. Navigieren Sie aus den Android Systemeinstellungen zu “Sicherheit” und tippen Sie auf “Google Play Protect”.
  2. Deaktivieren Sie sämtliche angezeigten Funktionen.

Nicht benötigte Apps entfernen

Als nächstes sollten Sie alle Apps, die Sie nicht benutzen (wollen), entfernen.

  1. Navigieren Sie aus den Einstellungen zu “Apps”.
  2. Klicken Sie auf “Alle Apps anzeigen”.
  3. Tippen Sie auf die Apps, die Sie nicht benötigen.
  4. Klicken Sie auf “Deinstallieren” oder auf “Deaktivieren”.

Wir empfehlen, alle Google Apps zu entfernen, mit Ausnahme der “Google Play Dienste” und des “Google Play Store”. Desweiteren stellen viele weitere häufig vorinstallierten Apps ein Risiko da, etwa

  • Facebook
  • WhatsApp
  • Microsoft Office
  • Samsung Health
  • Diese Liste könnte endlos weitergeführt werden…

Sicherheitseinstellungen scharfschalten

Eine Displaysperre einrichten

  1. Navigieren Sie zu “Einstellungen” -> “Sicherheit”.
  2. Wählen Sie “Displaysperre” aus.
  3. Schalten Sie eine PIN oder ein Passwort ein

Verschlüsslung aktivieren

  1. Gehen Sie nun zu “Einstellungen” -> “Sicherheit” -> “Verschlüsslung und Anmeldedaten”.
  2. Tippen Sie auf “Smartphone verschlüsseln” und folgen Sie den Anweisungen auf dem Bildschirm.

Freie Alternativen für Google Apps

Für die meisten Google Apps gibt es freie Alternativen. Die meisten Apps dieser Art lassen sich aus dem freiem Appstore F-Droid installieren.

F-Droid installieren

  1. Laden Sie F-Droid von hier herunter.
  2. Installieren Sie die APK Datei.
  3. Öffnen Sie F-Droid.
  4. Aktualisieren Sie die Paketquellen, indem Sie einmal von oben nach unten Wischen.

Empfohlene Apps installieren

Wir empfehlen die folgenden Apps als Alternative zu unfreien Diensten:

Der “harte Weg”

Beim harten Weg wird das Betriebssystem des Telefons verändert. Dies sollte nur von erfahrenen Nutzern durchgeführt werden! Wer mehr erfahren will, sollte sich das LineagesOS Wiki ansehen.

Weiterführende Informationen

the avatar of openSUSE Mauritius

openSUSE Board Election 2020 results announced

The announcement was made by election official, Ariez Vachha, on the openSUSE Project's mailing list.

The election started on 15 December 2020 and it ended on 30 December 2020. The results were computed today at around 08h00 UTC. All members received the results by email.

Ariez announced the results and provided some statistics.

229 out of 518 eligible voters have cast their vote in this election. In terms of percentage, the turnout is lower than last year's board election.

The complete results are as follows:

  • Axel Braun — 142 votes
  • Gertjan Lettink — 134 votes
  • Neal Gompa — 131 votes
  • Maurizio Galli — 103 votes
  • Nathan Wolf — 59 votes

The "none of the above" option, which was offered for the first time in a regular board election, obtained five votes.

Therefore, Axel, Gertjan and Neal are elected to serve for a 2-year term on the openSUSE Board.