VMware Kubuntu 20.04 und die Auflösung 1920x1080

25.04.2020 - Lesezeit: ~1 Minute

Wenn unter VMware eine Kubuntu-Maschine installiert wird, dann erfolgt die Installation in der Default-Auflösung 800x600.

Auch nach dem Reboot bleibt Kubuntu bei der Meinung, dass eine höhere Auflösung nicht möglich sei:

Hier wird erklärt, dass der Hintergrunddienst KSreen2 dafür zuständig ist. Wenn man diesen Dienst abschaltet lässt sich die Auflösung auf 1920x1080 umschalten.

Tags: Kubuntu Kubuntu 20.04 Resolution 1920x1080

Wildkamera AVI für Whatsapp ausgeben

17.03.2020 - Lesezeit: ~1 Minute
ffmpeg -i IMAG2476.AVI -c:v libx264 -c:a aac output.mp4

Zuschneiden des Videos dann mit Shotcut

Tags: Linux-Scripte Wildkamera Video Shotcut


Abschalten von unattended-upgr

11.01.2020 - Lesezeit: ~1 Minute

In einer meiner VMware-Maschinen (Kubuntu 18.04.2 LTS) lief das Programm unattended-upgr Amok mit einer Prozessorauslastung von 100%. Auch ein Neustart half da nichts. Hier steht beschrieben, wie dem Problem abgeholfen werden kann.

sudo dpkg-reconfigure -plow unattended-upgrades

Nach einem reboot war dann alles wieder gut.

Dieses Shell-Script löst die gleiche Aufgabe in der Konsole:

#!/bin/bash
sudo apt update && sudo apt dist-upgrade
sudo apt-get autoremove --purge
sudo apt-get autoclean
Tags: Linux-Scripte

Python Zugriff auf Thunderbird

23.12.2019 - Lesezeit: ~1 Minute

Literatur

import mailbox
from email.header import decode_header, make_header
import os
from glob import glob

def isDeleted(msg):
    flags = msg['X-Mozilla-Status']
    try:
        flags = int(flags, 16)
        if (flags & 8) != 0:
            return True
        else:
            return False
    except:
        return False

def getSubject(aSubject):
    return (make_header(decode_header(aSubject)))

def isUnread(msg):
    flags = msg['X-Mozilla-Status']
    try:
        flags = int(flags, 16)
        if (flags & 1) == 0:
            return True
        else:
            return False
    except:
        return False

def listMails(aMailbox, i):
    for message in mailbox.mbox(aMailbox):
        subject = message['subject']  # Could possibly be None.
        if subject:
            if not isDeleted(message):
                if isUnread(message):
                    i += 1
                    print(i, ' ', getSubject(subject))
    return i

def allInboxes(aPath):
    i = 0
    aInboxes = [y for x in os.walk(aPath) for y in glob(os.path.join(x[0], '*/Inbox'))]
    for aInbox in aInboxes:
        i = listMails(aInbox, i)

if __name__ == '__main__':
    aPfad = os.path.join(os.path.expanduser('~'), '.thunderbird')
    allInboxes(aPfad)
Tags:

pyQt: QSystemTrayIcon

19.12.2019 - Lesezeit: 3 Minuten

Gesucht wird ein Programm das im Systray läuft und periodisch nach neuen E-Mails schaut und bei neuen E-Mails das Icon im Systray ändert.

Dieses Programm lässt das Icon im Sekundentakt blinken.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtGui import QIcon

# das sind Standard-Icon-Bezeichnungen
ICON_MAIL_NEW = 'face-cool'
ICON_MAIL_EMTPY = 'mail-mark-read'

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.canExit = False
        self.initUI()
        app.setWindowIcon(QIcon.fromTheme(ICON_MAIL_EMTPY))
        self.isNewMail = True
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.checkNewMail)
        self.timer.start(1000)

    def initUI(self):

        self.bbCheckMail = QtWidgets.QAction(QIcon.fromTheme(ICON_MAIL_NEW), 'Check for Mail')
        self.bbCheckMail.setCheckable(True)
        self.bbCheckMail.triggered[bool].connect(self.displayNewMail)

        self.toolbar = self.addToolBar('tb')
        self.toolbar.addAction(self.bbCheckMail)

        layout = QtWidgets.QGridLayout()
        plain = QtWidgets.QPlainTextEdit()

        layout.addWidget(plain, 0, 0)

        centralWidget = QtWidgets.QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

        # SystemTrayIcon ersstellen
        self.icon = QtWidgets.QSystemTrayIcon(QIcon.fromTheme(ICON_MAIL_NEW))
        self.icon.show()

        menu = QtWidgets.QMenu(parent=None)
        menu.aboutToShow.connect(self.sysTrayAction)
        self.icon.setContextMenu(menu)

        self.setGeometry(300, 300, 300, 300)
        # kein Show(), da dass Programm im Hintergrund laufen soll.
        # self.show()

    def closeEvent(self, event):
        # do stuff
        if self.canExit:
            event.accept()  # let the window close
        else:
            # Das Programm wird erst beim zweiten closeEvent geschlossen.
            self.canExit = True
            self.hide()
            event.ignore()

    def displayNewMail(self, active):
        if active:
            aIcon = QIcon.fromTheme(ICON_MAIL_NEW)
        else:
            aIcon = QIcon.fromTheme(ICON_MAIL_EMTPY)
        self.bbCheckMail.setIcon(aIcon)
        app.setWindowIcon(aIcon)
        self.icon.setIcon(aIcon)

    def checkNewMail(self):
        self.isNewMail = not self.isNewMail
        self.displayNewMail(self.isNewMail)

    def sysTrayAction(self):
        self.show()
        print('System tray icon clicked.')

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    MWindow = MainWindow()

    sys.exit(app.exec_())

Das Schwierigste an der Entwicklung von KDE-Anwendungen ist bei der Recherche herauszubekommen, ob die in den Weiten des Internets gefundenen Beispiele auch noch für die aktuelle KDE-Version gültig sind.

Ich arbeite zur Zeit mit:

  • Kubuntu 18.04 LTS
  • KDE-Frameworks 5.44.0
  • Qt 5.9.5

Literatur

Tags: KDE5