MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    MM not showing on internal monitor after fixuppm2

    Scheduled Pinned Locked Moved Solved Troubleshooting
    6 Posts 2 Posters 742 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • UncleRogerU Offline
      UncleRoger
      last edited by

      I set up MM on a Pi Zero 2 and told the install script to not start MM on boot because I wanted to be able to play with it from the command line. Now that I’ve got it mostly where it needs to be, I tried to switch to having it start at boot using the fixuppm2.sh script.

      Now it seems to be running after a reboot (I can access it from a web browser on another system) but nothing shows on the attached screen.

      It’s a Pi Zero 2w attached to a 7" LCD screen from Amazon using HDMI.

      In config.js, I have this set up:

      let config = {
              address: "192.168.xxx.xxx",     // Address to listen on, can be:
              address: "0.0.0.0",     // Address to listen on, can be:
                                                              // - "localhost", "127.0.0.1", "::1" to listen on loopback interface
                                                              // - another specific IPv4/6 to listen on a specific interface
                                                              // - "0.0.0.0", "::" to listen on any interface
                                                              // Default, when address config is left out or empty, is "localhost"
              port: 8080,
              basePath: "/",  // The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
                                                                              // you must set the sub path here. basePath must end with a /
              ipWhitelist: ["127.0.0.1", "192.168.xxx.0/24"], // Set [] to allow all IP addresses
      

      On the other MM I’m working on (Pi 4), I use this to start it:

      mmstart ()
      {
          cd $HOME/MagicMirror;
          DISPLAY=:0 npm start
      }
      

      Am I missing the “DISPLAY=:0” somewhere?

      Thanks!

      S 1 Reply Last reply Reply Quote 0
      • S Do not disturb
        sdetweil @sdetweil
        last edited by

        @UncleRoger if you used my fixup script, it uses MagicMirror/installers/mm.sh

        you don’t need another script

        can you do this

        pm2 stop all
        pm2 flush
        pm2 status
        and then
        pm2 start x

        where x is the name or number on the row for the MagicMirror app.

        usually 0
        wait til you expect.it to show
        then
        pm2 stop all

        the pm2 logs --lines=100

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        UncleRogerU 1 Reply Last reply Reply Quote 0
        • S Do not disturb
          sdetweil @UncleRoger
          last edited by

          @UncleRoger can you show the output of pm2 logs --lines=50

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          UncleRogerU 1 Reply Last reply Reply Quote 0
          • UncleRogerU Offline
            UncleRoger @sdetweil
            last edited by

            @sdetweil

            Looks like there are some definite errors, perhaps due to it being a 1024x600 monitor?

            ezra@ezrapi:~/MagicMirror $ pm2 logs --lines=50
            [TAILING] Tailing last 50 lines for [all] processes (change the value with --lines option)
            /home/ezra/.pm2/pm2.log last 50 lines:
            PM2        | 2024-07-08T15:07:31: PM2 error: Error caught while calling pidusage
            PM2        | 2024-07-08T15:07:32: PM2 error: Error: ESRCH: no such process, read
            PM2        | 2024-07-08T15:07:32: PM2 log: [Watch] Stop watching MagicMirror
            PM2        | 2024-07-08T15:07:32: PM2 log: Stopping app:MagicMirror id:0
            PM2        | 2024-07-08T15:07:32: PM2 log: App [MagicMirror:0] exited with code [0] via signal [SIGINT]
            PM2        | 2024-07-08T15:07:32: PM2 log: pid=2159 msg=process killed
            PM2        | 2024-07-08T15:07:32: PM2 log: PM2 successfully stopped
            PM2        | 2024-07-08T15:07:56: PM2 log: ===============================================================================
            PM2        | 2024-07-08T15:07:56: PM2 log: --- New PM2 Daemon started ----------------------------------------------------
            PM2        | 2024-07-08T15:07:56: PM2 log: Time                 : Mon Jul 08 2024 15:07:56 GMT-0700 (Pacific Daylight Time)
            PM2        | 2024-07-08T15:07:56: PM2 log: PM2 version          : 5.4.1
            PM2        | 2024-07-08T15:07:56: PM2 log: Node.js version      : 20.8.0
            PM2        | 2024-07-08T15:07:56: PM2 log: Current arch         : arm64
            PM2        | 2024-07-08T15:07:56: PM2 log: PM2 home             : /home/ezra/.pm2
            PM2        | 2024-07-08T15:07:56: PM2 log: PM2 PID file         : /home/ezra/.pm2/pm2.pid
            PM2        | 2024-07-08T15:07:56: PM2 log: RPC socket file      : /home/ezra/.pm2/rpc.sock
            PM2        | 2024-07-08T15:07:56: PM2 log: BUS socket file      : /home/ezra/.pm2/pub.sock
            PM2        | 2024-07-08T15:07:56: PM2 log: Application log path : /home/ezra/.pm2/logs
            PM2        | 2024-07-08T15:07:56: PM2 log: Worker Interval      : 30000
            PM2        | 2024-07-08T15:07:56: PM2 log: Process dump file    : /home/ezra/.pm2/dump.pm2
            PM2        | 2024-07-08T15:07:56: PM2 log: Concurrent actions   : 2
            PM2        | 2024-07-08T15:07:56: PM2 log: SIGTERM timeout      : 1600
            PM2        | 2024-07-08T15:07:56: PM2 log: ===============================================================================
            PM2        | 2024-07-08T15:08:01: PM2 log: [Watch] Start watching MagicMirror
            PM2        | 2024-07-08T15:08:01: PM2 log: App [MagicMirror:0] starting in -fork mode-
            PM2        | 2024-07-08T15:08:01: PM2 log: App [MagicMirror:0] online
            PM2        | 2024-07-08T16:07:14: PM2 log: [Watch] Stop watching MagicMirror
            PM2        | 2024-07-08T16:07:14: PM2 log: Stopping app:MagicMirror id:0
            PM2        | 2024-07-08T16:07:15: PM2 log: App [MagicMirror:0] exited with code [0] via signal [SIGINT]
            PM2        | 2024-07-08T16:07:15: PM2 log: pid=863 msg=process killed
            PM2        | 2024-07-08T16:07:15: PM2 log: PM2 successfully stopped
            PM2        | 2024-07-08T16:07:32: PM2 log: ===============================================================================
            PM2        | 2024-07-08T16:07:32: PM2 log: --- New PM2 Daemon started ----------------------------------------------------
            PM2        | 2024-07-08T16:07:32: PM2 log: Time                 : Mon Jul 08 2024 16:07:32 GMT-0700 (Pacific Daylight Time)
            PM2        | 2024-07-08T16:07:32: PM2 log: PM2 version          : 5.4.1
            PM2        | 2024-07-08T16:07:32: PM2 log: Node.js version      : 20.8.0
            PM2        | 2024-07-08T16:07:32: PM2 log: Current arch         : arm64
            PM2        | 2024-07-08T16:07:32: PM2 log: PM2 home             : /home/ezra/.pm2
            PM2        | 2024-07-08T16:07:32: PM2 log: PM2 PID file         : /home/ezra/.pm2/pm2.pid
            PM2        | 2024-07-08T16:07:32: PM2 log: RPC socket file      : /home/ezra/.pm2/rpc.sock
            PM2        | 2024-07-08T16:07:32: PM2 log: BUS socket file      : /home/ezra/.pm2/pub.sock
            PM2        | 2024-07-08T16:07:32: PM2 log: Application log path : /home/ezra/.pm2/logs
            PM2        | 2024-07-08T16:07:32: PM2 log: Worker Interval      : 30000
            PM2        | 2024-07-08T16:07:32: PM2 log: Process dump file    : /home/ezra/.pm2/dump.pm2
            PM2        | 2024-07-08T16:07:32: PM2 log: Concurrent actions   : 2
            PM2        | 2024-07-08T16:07:32: PM2 log: SIGTERM timeout      : 1600
            PM2        | 2024-07-08T16:07:32: PM2 log: ===============================================================================
            PM2        | 2024-07-08T16:07:32: PM2 log: [Watch] Start watching MagicMirror
            PM2        | 2024-07-08T16:07:32: PM2 log: App [MagicMirror:0] starting in -fork mode-
            PM2        | 2024-07-08T16:07:32: PM2 log: App [MagicMirror:0] online
            
            /home/ezra/.pm2/logs/MagicMirror-out.log last 50 lines:
            0|MagicMir | ### OTHER:    timeZone: America/Los_Angeles; ELECTRON_ENABLE_GPU: undefined
            0|MagicMir |
            0|MagicMir | > magicmirror@2.27.0 start
            0|MagicMir | > DISPLAY="${DISPLAY:=:0}" ./node_modules/.bin/electron js/electron.js
            0|MagicMir |
            0|MagicMir | [2024-07-08 16:08:41.260] [LOG]   Starting MagicMirror: v2.27.0
            0|MagicMir | [2024-07-08 16:08:44.626] [LOG]   Loading config ...
            0|MagicMir | [2024-07-08 16:08:44.661] [LOG]   config template file not exists, no envsubst
            0|MagicMir | [2024-07-08 16:08:44.681] [LOG]   Loading module helpers ...
            0|MagicMir | [2024-07-08 16:08:44.690] [LOG]   No helper found for module: alert.
            0|MagicMir | [2024-07-08 16:08:47.131] [LOG]   Initializing new module helper ...
            0|MagicMir | [2024-07-08 16:08:47.133] [LOG]   Module helper loaded: updatenotification
            0|MagicMir | [2024-07-08 16:08:47.633] [LOG]   No helper found for module: MMM-SimpleText.
            0|MagicMir | [2024-07-08 16:08:48.272] [LOG]   No helper found for module: MMM-WeeklySchedule.
            0|MagicMir | [2024-07-08 16:08:48.312] [LOG]   No helper found for module: clock.
            0|MagicMir | [2024-07-08 16:08:49.063] [LOG]   Initializing new module helper ...
            0|MagicMir | [2024-07-08 16:08:49.064] [LOG]   Module helper loaded: calendar
            0|MagicMir | [2024-07-08 16:08:49.064] [LOG]   All module helpers loaded.
            0|MagicMir | [2024-07-08 16:08:49.109] [LOG]   Starting server on port 8080 ...
            0|MagicMir | [2024-07-08 16:08:55.246] [LOG]   Server started ...
            0|MagicMir | [2024-07-08 16:08:55.248] [LOG]   Connecting socket for: updatenotification
            0|MagicMir | [2024-07-08 16:08:55.398] [LOG]   Starting module helper: updatenotification
            0|MagicMir | [2024-07-08 16:08:55.400] [LOG]   Connecting socket for: calendar
            0|MagicMir | [2024-07-08 16:08:55.401] [LOG]   Starting node helper for: calendar
            0|MagicMir | [2024-07-08 16:08:55.444] [LOG]   Sockets connected & modules started ...
            0|MagicMir | [2024-07-08 16:09:55.204] [LOG]   Launching application.
            0|MagicMir | [2024-07-08 16:10:22.840] [INFO]  System information:
            0|MagicMir | ### SYSTEM:   manufacturer: ; model: ; raspberry: undefined; virtual: false
            0|MagicMir | ### OS:       platform: linux; distro: Debian GNU/Linux; release: 12; arch: arm64; kernel: 6.6.31+rpt-rpi-v8
            0|MagicMir | ### VERSIONS: electron: 29.4.2; used node: 20.9.0; installed node: 20.8.0; npm: 10.1.0; pm2: 5.4.1
            0|MagicMir | ### OTHER:    timeZone: America/Los_Angeles; ELECTRON_ENABLE_GPU: undefined
            0|MagicMir | [2024-07-08 16:10:25.501] [LOG]   Create new calendarfetcher for url: https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics - Interval: 3600000
            0|MagicMir | [2024-07-08 16:10:26.566] [INFO]  updatenotification: Updater Class Loaded!
            0|MagicMir | [2024-07-08 16:10:26.586] [INFO]  updatenotification: Checking PM2 using...
            0|MagicMir | [2024-07-08 16:10:26.657] [INFO]  Checking git for module: MMM-SimpleText
            0|MagicMir | [2024-07-08 16:10:29.608] [INFO]  Checking git for module: MMM-WeeklySchedule
            0|MagicMir | [2024-07-08 16:10:29.687] [INFO]  Checking git for module: MagicMirror
            0|MagicMir | [2024-07-08 16:10:30.370] [INFO]  updatenotification: [PM2] You are not using pm2
            0|MagicMir | [2024-07-08 16:10:40.444] [LOG]   Use existing calendarfetcher for url: https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics
            0|MagicMir | [2024-07-08 16:10:40.449] [INFO]  Calendar-Fetcher: Broadcasting 0 events from https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics.
            0|MagicMir | [2024-07-08 16:10:40.742] [INFO]  updatenotification: Updater Class Loaded!
            0|MagicMir | [2024-07-08 16:10:40.750] [INFO]  updatenotification: Checking PM2 using...
            0|MagicMir | [2024-07-08 16:10:44.053] [INFO]  updatenotification: [PM2] You are not using pm2
            0|MagicMir | [2024-07-08 16:10:47.166] [INFO]  Calendar-Fetcher: Broadcasting 348 events from https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics.
            0|MagicMir | [2024-07-08 16:11:41.348] [LOG]   Use existing calendarfetcher for url: https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics
            0|MagicMir | [2024-07-08 16:11:41.349] [INFO]  Calendar-Fetcher: Broadcasting 348 events from https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics.
            0|MagicMir | [2024-07-08 16:11:41.830] [INFO]  updatenotification: Updater Class Loaded!
            0|MagicMir | [2024-07-08 16:11:41.831] [INFO]  updatenotification: Checking PM2 using...
            0|MagicMir | [2024-07-08 16:11:44.452] [INFO]  updatenotification: [PM2] You are not using pm2
            0|MagicMir | [2024-07-08 16:11:47.748] [INFO]  Calendar-Fetcher: Broadcasting 348 events from https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics.
            
            /home/ezra/.pm2/logs/MagicMirror-error.log last 50 lines:
            0|MagicMir | [51524:0618/115916.631592:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [51524:0618/120003.166408:ERROR:network_service_instance_impl.cc(599)] Network service crashed, restarting service.
            0|MagicMir | [1711:0618/120935.764914:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [2023:0618/123653.369959:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [2023:0618/123655.373390:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [2383:0618/124525.371887:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [2383:0618/124527.520381:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [2521:0618/132817.601311:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [2521:0618/132817.601311:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [1755:0624/150346.949128:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [2007:0624/150435.137445:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [1750:0624/151509.039126:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [1867:0624/164648.650496:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [1867:0624/164648.650780:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [1822:0708/145756.969124:ERROR:ozone_platform_x11.cc(244)] Missing X server or $DISPLAY
            0|MagicMir | [1822:0708/145757.582931:ERROR:env.cc(257)] The platform failed to initialize.  Exiting.
            0|MagicMir | [1061:0708/150021.079201:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [1061:0708/150209.256345:ERROR:network_service_instance_impl.cc(599)] Network service crashed, restarting service.
            0|MagicMir | [1047:0708/160301.297526:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [1631:0708/160702.876827:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [1631:0708/160702.876827:ERROR:connection.cc(61)] X connection error received.
            0|MagicMir | [1059:0708/160917.377715:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path= /org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
            0|MagicMir | [2024-07-08 16:10:29.422] [ERROR] Calendar Error. Could not fetch calendar:  https://calendar.google.com/calendar/ical/tdnq84q029jan4hbnl1ej1pkqs%40group.calendar.google.com/private-cc1ca126b77d7708f2a3c623ef7f89be/basic.ics TypeError: fetch failed
            0|MagicMir |     at Object.fetch (node:internal/deps/undici/undici:12293:11)
            0|MagicMir |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
            0|MagicMir |   cause: AggregateError
            0|MagicMir |       at internalConnectMultiple (node:net:1114:18)
            0|MagicMir |       at internalConnectMultiple (node:net:1177:5)
            0|MagicMir |       at Timeout.internalConnectMultipleTimeout (node:net:1687:3)
            0|MagicMir |       at listOnTimeout (node:internal/timers:575:11)
            0|MagicMir |       at process.processTimers (node:internal/timers:514:7) {
            0|MagicMir |     code: 'ETIMEDOUT',
            0|MagicMir |     [errors]: [ [Error], [Error] ]
            0|MagicMir |   }
            0|MagicMir | }
            0|MagicMir | [1059:0708/161104.480729:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [1059:0708/162501.844574:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            0|MagicMir | [1059:0708/162502.923529:ERROR:browser_main_loop.cc(278)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
            
            S 1 Reply Last reply Reply Quote 0
            • S Do not disturb
              sdetweil @UncleRoger
              last edited by

              @UncleRoger hm
              don’t see anything really except the timeout on calendar fetch

              you have 2 address: sections last one wins

              you also have a whitelist with localhost only

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              S 1 Reply Last reply Reply Quote 0
              • S Do not disturb
                sdetweil @sdetweil
                last edited by

                @UncleRoger if you used my fixup script, it uses MagicMirror/installers/mm.sh

                you don’t need another script

                can you do this

                pm2 stop all
                pm2 flush
                pm2 status
                and then
                pm2 start x

                where x is the name or number on the row for the MagicMirror app.

                usually 0
                wait til you expect.it to show
                then
                pm2 stop all

                the pm2 logs --lines=100

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                UncleRogerU 1 Reply Last reply Reply Quote 0
                • UncleRogerU Offline
                  UncleRoger @sdetweil
                  last edited by

                  @sdetweil

                  Ugh. My apologies. I did the stop/start and rebooted and did it again and now it’s showing up on the screen. Must have been a temporary glitch or something.

                  Sorry to have wasted your time.

                  Roger

                  1 Reply Last reply Reply Quote 1
                  • UncleRogerU UncleRoger has marked this topic as solved on

                  Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                  Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                  With your input, this post could be even better 💗

                  Register Login
                  • 1 / 1
                  • First post
                    Last post
                  Enjoying MagicMirror? Please consider a donation!
                  MagicMirror created by Michael Teeuw.
                  Forum managed by Sam, technical setup by Karsten.
                  This forum is using NodeBB as its core | Contributors
                  Contact | Privacy Policy