Keep a remote X11 app running after disconnecting the Session

Xpra is the tool of choice 🙂
Install xpra on server and client like:

[code language=”bash”]

root@h2545526:~# apt install xpra
.
.
xpra (2.1.3+dfsg-1ubuntu1) wird eingerichtet …

[/code]

start e.g. firefox on the server:
[code language=”bash”]
xpra start :100 –start-child=firefox
[/code]

now connect from remote through Ssh:
[code language=”bash”]
xpra attach ssh/user@serverFQDN/100
[/code]

With xpra firefox remains active on the server even when the client disconnects 🙂

Big advantage for e.g. large downloads.

Create a Secure Spring REST API | Java Code Geeks – 2019

Interesting article from Raphael Do_vale on Java Code Geeks.

Source: Create a Secure Spring REST API | Java Code Geeks – 2019

Integration of Tradfri and Netatmo on Openhab2

Prerequisites:

add Tradfri Binding

add Netatmo Binding

content of default.items:

[html] Switch Wz_Lampe "Wohnzimmer Lampe" <light> { channel="tradfri:0220:gwdcefcabd0899:65566:brightness" } Number:Temperature Netatmo_Indoor_Temperature "Temperatur [%.1f %unit%]" <temperature> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Temperature" } Number:Dimensionless Netatmo_Indoor_Humidity "Luftfeuchtigkeit [%d %unit%]" <humidity> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Humidity" } Number Netatmo_Indoor_Humidex "Hitze-Index [%.0f]" <temperature_hot> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Humidex" } Number:Temperature Netatmo_Indoor_HeatIndex "Maximal-Temperatur [%.1f %unit%]" <temperature_hot> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:HeatIndex" } Number:Dimensionless Netatmo_Indoor_Co2 "Co2 [%d %unit%]" <carbondioxide> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Co2" } Number:Pressure Netatmo_Indoor_Pressure "Luftdruck [%.1f %unit%]" <pressure> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Pressure" } Number:Pressure Netatmo_Indoor_AbsolutePressure "Absoluter Luftdruck [%.1f %unit%]" <pressure> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:AbsolutePressure" } Number:Dimensionless Netatmo_Indoor_Noise "Geräusche [%d %unit%]" <soundvolume> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:Noise" } Number Netatmo_Indoor_WifiStatus "WifiStatus [%s]" <signal> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:WifiStatus" } DateTime Netatmo_Indoor_TimeStamp "TimeStamp [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <calendar> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:TimeStamp" } DateTime Netatmo_Indoor_LastStatusStore "LastStatusStore [%1$td.%1$tm.%1$tY %1$tH:%1$tM]" <text> { channel = "netatmo:NAMain:2091c6dc:70ee5018ff12:LastStatusStore" } Number Out_Temp "Temperature [%.1f °C]" {channel="netatmo:NAModule1:2091c6dc:02000019da1a:Temperature"} Number Out_Luft "Luftfeuchtigkeit [%d %unit%]" {channel="netatmo:NAModule1:2091c6dc:02000019da1a:Humidity"} Number Wz_Fb "Batterie Wohnzimmer [1f]" {channel="tradfri:0830:gwdcefcabd0899:65565:battery_level"} Switch Wz_Fbb { channel="tradfri:0830:gwdcefcabd0899:65565:battery_low" } Number Ku_Fb "Batterie Kueche [1f]" {channel="tradfri:0830:gwdcefcabd0899:65562:battery_level"} Switch Ku_Fbb { channel="tradfri:0830:gwdcefcabd0899:65562:battery_low" } Number Ul_Fb "Batterie Uli [1f]" {channel="tradfri:0830:gwdcefcabd0899:65536:battery_level"} Switch Ul_Fbb { channel="tradfri:0830:gwdcefcabd0899:65536:battery_low" } Number Ma_Fb "Batterie Marie [1f]" {channel="tradfri:0830:gwdcefcabd0899:65555:battery_level"} Switch Ma_Fbb { channel="tradfri:0830:gwdcefcabd0899:65555:battery_low" } Number Eg_Bm "" {channel="tradfri:0107:gwdcefcabd0899:65558:battery_level"} Switch Eg_Bmb { channel="tradfri:0107:gwdcefcabd0899:65558:battery_low" } Number Og_Bm "" {channel="tradfri:0107:gwdcefcabd0899:65553:battery_level"} Switch Og_Bmb { channel="tradfri:0107:gwdcefcabd0899:65553:battery_low" } [/html]

content of default.sitemap

[html] sitemap default label="KS23" { Frame label="Wohnzimmer" { Switch item=Wz_Lampe label="Wohnzimmer Lampe" Text item=Netatmo_Indoor_Temperature Text item=Netatmo_Indoor_Humidity Text item=Netatmo_Indoor_Humidex valuecolor=[<20.1="green",<29.1="blue",<28.1="yellow",<45.1="orange",<54.1="red",>54.1="maroon"] Text item=Netatmo_Indoor_HeatIndex Text item=Netatmo_Indoor_Co2 valuecolor=[<800="green",<1000="orange",<1400="red",>1399="maroon"] Text item=Netatmo_Indoor_Pressure Text item=Netatmo_Indoor_AbsolutePressure Text item=Netatmo_Indoor_Noise Text item=Netatmo_Indoor_WifiStatus Text item=Netatmo_Indoor_TimeStamp Text item=Netatmo_Indoor_LastStatusStore } Frame label="Aussen" { Text item=Out_Temp label="Temperatur [%.1f °C]" icon="temperature" Text item=Out_Luft } Frame label="Battery" { Text item=Wz_Fb label="Wohnzimmer Fernbedienung [%d %%] " icon="battery" Switch item=Wz_Fbb label="Battery low warning" Text item=Ku_Fb label="Kueche Fernbedienung [%d %%]" icon="battery" Switch item=Ku_Fbb label="Battery low warning" Text item=Ul_Fb label="Uli Fernbedienung [%d %%]" icon="battery" Switch item=Ul_Fbb label="Battery low warning" Text item=Ma_Fb label="Marie Fernbedienung [%d %%]" icon="battery" Switch item=Ma_Fbb label="Battery low warning" Text item=Og_Bm label="Obergeschoss Bewegungsmelder [%d %%]" icon="battery" Switch item=Og_Bmb label="Battery low warning" Text item=Eg_Bm label="Erdgeschoss Bewegungsmelder [%d %%]" icon="battery" Switch item=Eg_Bmb label="Battery low warning" } } [/html]

Gui looks like:

HTML Skeleton file and VS Code

Just type ! and press the TAB key 🙂

! <TAB> creates :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>
</html>