VMware Kubuntu 20.04 und die Auflösung 1920x1080

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

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 1920×1080 umschalten.

default alt. text

Abschalten von unattended-upgr

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

Python Zugriff auf Thunderbird

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)

pyQt: QSystemTrayIcon

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: 

Raspi Inbetriebnahme

  1. Download 2019–07–10-raspbian-buster-lite.zip
  2. Entpacken 2019–07–10-raspbian-buster-lite.img
  3. Auf SD-Card mit usb-creator-gtk
  4. Da später per ssh auf den raspi zugegriffen werden soll, in der root partition eine datei ssh anlegen, dann wird der ssh-server beim hochfahren mit gestartet.
  5. SD-Card im Raspi einlegen und lange warten
  6. Login über angesteckte Tastatur mit

    user pi

    password raspberry

    (Achtung die Tastatur spricht qwerty) deshalb rasberrz eingeben

  7. Passwort ändern

    passwd pi

    Password is too simple

    Deshalb als root ausführen:

    sudo su

    passwd pi

  8. ssh aktivieren

    sudo systemctl enable ssh

    sudo systemctl start ssh

  9. 7"-Bildschirm um 180° drehen

    sudo nano /boot/config.txt

    lcd_rotate=2

  10. Soundkarte aktivieren und On-Board-Sound deaktivieren

    sudo nano /boot/config.txt

    dtoverlay=hifiberry-dacplus

    # Enable audio (loads snd_bcm2835)

    #dtparam=audio=on

  11. mocp für die Soundkarte hifiberry-dacplus einrichten

    nano .moc/config

    ALSAStutterDe­feat=yes

    ALSAMixer1=Digital

  12. mocp testen

    mocp -S

    mocp -a http://wdr-1live-live.icecast.wdr.de/…8/stream.mp3

    mocp –play

    mocp -i

  13. Bildschirm dunkel schalten

    sudo nano /boot/config.txt

    #wnf display ausschalten

    hdmi_blanking=1

    oder

    sudo sh -c „echo ‚255‘ >> /sys/class/bac­klight/rpi_bac­klight/brightnes­s“

    Bildschirm hell schalten

    sudo sh -c „echo ‚0‘ >> /sys/class/bac­klight/rpi_bac­klight/brightnes­s“

  14. WLAN einrichten

    sudo iwlist wlan0 scan | egrep „(ESSID|IEEE)“

    ESSID:„FritzBox­Flur“

    IE: IEEE 802.11i/WPA2 Version 1

    sudo nano /etc/wpa_suppli­cant/wpa_suppli­cant.conf

    network={

    ssid=„FritzBoxFlur“

    psk=„DasWlanPas­swort“

    }

Tags: 

VMware Workstation: bora/lib/string/str.c:284 Buffer too small

Ein Schreck in der Morgenstunde:

Wollen Sie die neue Programmversion für VMware Workstation 15.5 installieren?

Ja. Ich will. Aber die Installation will nicht:

bora/lib/strin­g/str.c:284 Buffer too small

Hier im Heiseforum steht die Lösung.

$ sudo LC_ALL=C ./VMware-Workstation-Full-15.5.0-14665864.x86_64.bundle

Drupallehrgang

Vorbereitung


Im Totalcommander FTP einrichten

  • Totalcommander starten
  • Strg+F Neue Verbindung
default alt. text

Anmelden im CMS Drupal7


Neuer Artikel

  • Titel eingeben
  • Tags eingeben (Bitte zuerst nach bereits vorhandenen Tags suchen, in dem einige Buchstaben eingegeben werden)
  • Body eingeben
  • Wenn der Artikel länger als 600 Zeichen wird, den Artikel aufspalten in Zusammenfassung und Body
  • In Informationen zum Autor wird das Feld geschrieben am beim Speichern ausgefüllt.

Bilder bearbeiten

  • Bild mit Irfanview öffnen
  • mit gedrückter Maustaste gewünschten Ausschnitt wählen
  • Strg+Y zuschneiden des Bildes
  • Strg+R neue Bildgröße wählen (Width 600 Pixel)
  • S Bild speichern unter (bitte einen sprechenden Namen vergeben: z.B. saxionade_tes­t01.jpg) Die Bildnamen dürfen keine Leerzeichen, Sonderzeichen oder Umlaute enthalten.
  • JPEG-Qualität auf 90% einstellen um die Dateigröße zu verringern.

Bilder hochladen

  • Totalcommander starten
  • Strg+F Mit FTP-Server verbinden
  • mit der Einfg-Taste auf der linken Seite die hochzuladenden Bilder markieren.
  • auf der rechten Seite das Verzeichnis 2019 auswählen
  • F5 Bilder kopieren

Bilder im Artikel anzeigen

  • Niederfrohna.de arbeitet mit der Markup Language Texy!
  • Deshalb müssen keine HTML-Befehle verwendet werden, um Bilder anzuzeigen

    Die Textauszeichnung

[* ../bilder/2014/saxionade_test_01.jpg *]

zeigt das soeben hochgeladen Bild an

default alt. text

( Oder in diesem Fall nicht weil das Bild nicht hochgeladen wurde. ;-)


Texy!-Syntax

---- horizontale Linie
**Fettschrift**
"Bitte bei der Freien Presse weiterlesen":http;//www.freiepresse.de
"Weitere Fotos":?q=node/1148
Tags: 

Delphi TEventLogger

MEINserver Service – Logmeldungen werden über TEventLogger ausgegeben.

Damit die Ereignisanzeige nicht mit den Worten beginnt:

Die Beschreibung für die Ereignis-ID „0“ aus der Quelle „MEINserver“ wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf dem lokalen Computer installiert, oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren. Falls das Ereignis auf einem anderen Computer aufgetreten ist, mussten die Anzeigeinforma­tionen mit dem Ereignis gespeichert werden. Die folgenden Informationen wurden mit dem Ereignis gespeichert:

muss eine res-Datei erstellt und für die Ereignisanzeige zur Verfügung gestellt werden.

Die Datei meinServer_Mes­sage.mc erstellen. (Bitte den Punkt und die Leerzeile nach jedem beachten)

LanguageNames=(German=0x407:MSG00407)

MessageId=0x2
SymbolicName=Kategorie_1
Language=German
Kategorie 1
.

MessageId=0x10
SymbolicName=MSG_SERVER_MELDUNG
Language=German
MEINserver: %1
.

Mit Hilfe von mc.exe und brcc32.exe die Datei meinServer_Mes­sage.res erzeugen. (mc.exe stammt aus dem Microsoft Windows 10 SDK )

@"c:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\mc.exe" meinServer_Message.mc
@brcc32 meinServer_Message.rc -fo meinServer_Message.res
@pause

Die Resourcendatei im Projekt einbinden

program meinServer;

uses
  SvcMgr,
  ...
  tools_web in '..\tools\tools_web.pas';

{$R *.res}
{$R meinServer_Message.res}

begin
  if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then
    SvcMgr.Application.Initialize;
  SvcMgr.Application.CreateForm(TmeinServe, meinServer);
  SvcMgr.Application.Run;
end.

Beim Setup des Services muss die Message-Datei in die Registry eingetragen werden:

const
  cEventLogger_MEINserver = 'MEINserver';
  cEventLogger_MEINserver_Category = $02;
  cEventLogger_MEINserver_ID = $20;


procedure WriteRegistryFuerEventlog(reg: TRegistry);
const
  REG_CategoryCount = 'CategoryCount';
  REG_TypesSupported = 'TypesSupported';
  REG_EventMessageFile = 'EventMessageFile';
  REG_CategoryMessageFile = 'CategoryMessageFile';
  cCategoryCount = 1;
  cTypesSupported = 0;
var
  aMessageFile: string
begin
  aMessageFile := ExtractFilePath(Application.ExeName) + 'meinServer.exe';

  reg.RootKey := HKEY_LOCAL_MACHINE;
  if reg.OpenKey('SYSTEM\CurrentControlSet\Services\Eventlog\Application\' + cEventLogger_MEINserver, True) then
  begin
    if reg.ValueExists(REG_CategoryCount) then
    begin
      if reg.ReadInteger(REG_CategoryCount) <> cCategoryCount then
        reg.WriteInteger(REG_CategoryCount, cCategoryCount);
    end
    else
    begin
      reg.WriteInteger(REG_CategoryCount, cCategoryCount);
    end;
    if reg.ValueExists(REG_TypesSupported) then
    begin
      if reg.ReadInteger(REG_TypesSupported) <> cTypesSupported then
        reg.WriteInteger(REG_TypesSupported, cTypesSupported);
    end
    else
    begin
      reg.WriteInteger(REG_TypesSupported, cTypesSupported);
    end;
    if reg.ValueExists(REG_EventMessageFile) then
    begin
      if reg.ReadString(REG_EventMessageFile) <> aMessageFile then
        reg.WriteString(REG_EventMessageFile, aMessageFile);
    end
    else
    begin
      reg.WriteString(REG_EventMessageFile, aMessageFile);
    end;
    if reg.ValueExists(REG_CategoryMessageFile) then
    begin
      if reg.ReadString(REG_CategoryMessageFile) <> aMessageFile then
        reg.WriteString(REG_CategoryMessageFile, aMessageFile);
    end
    else
    begin
      reg.WriteString(REG_CategoryMessageFile, aMessageFile);
    end;
  end
  else
  begin
    abort;
  end;
end;

Anzeige der Meldungen in der Power-Shell

Get-EventLog -LogName Application -Source HEIMserver | format-table -wrap

Literatur

Seiten