feat(jmri): headless JMRI server with Leviton layout power monitor and X11 GUI mode
- Stable udev device symlinks (/dev/jmri/nce, /dev/jmri/loconet, /dev/jmri/lcc) - jmri-monitor: polls Leviton Decora Smart switch to start/stop JMRI automatically - Quiet hours 1-10 AM (no polling) - 30s off-delay before shutdown - LCRR config cloned from Gitea (ssh://gitea.mk-labs.cloud:2221/rblundon/LCRR.git) - ~/.jmri symlinked to LCRR repo for GitOps config management - jmri-gui: X11 remote GUI access (PanelPro/DecoderPro) via ssh -X as jmri user - Stops daemon, launches GUI, restarts daemon on exit if layout still on - jmri user gets login shell + SSH key for GUI sessions - Full JRE installed (openjdk-21-jre) for AWT/X11 support
This commit is contained in:
1 parent
a5433dcb5b
commit
d974c75d7c
26 files changed
+2460
-459
No files matched your search
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_hermes_git_homelab_ansible_roles_observer_files_grafana_provisioning_dashboards_main_node_exporter_json", "label": "node-exporter.json", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L1"}, {"id": "main_node_exporter_inputs", "label": "__inputs", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L2"}, {"id": "main_node_exporter_elements", "label": "__elements", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L12"}, {"id": "main_node_exporter_requires", "label": "__requires", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L13"}, {"id": "main_node_exporter_annotations", "label": "annotations", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L45"}, {"id": "main_node_exporter_annotations_list", "label": "list", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L46"}, {"id": "main_node_exporter_editable", "label": "editable", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L68"}, {"id": "main_node_exporter_fiscalyearstartmonth", "label": "fiscalYearStartMonth", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L69"}, {"id": "main_node_exporter_gnetid", "label": "gnetId", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L70"}, {"id": "main_node_exporter_graphtooltip", "label": "graphTooltip", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L71"}, {"id": "main_node_exporter_id", "label": "id", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L72"}, {"id": "main_node_exporter_links", "label": "links", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L73"}, {"id": "main_node_exporter_livenow", "label": "liveNow", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L91"}, {"id": "main_node_exporter_panels", "label": "panels", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L92"}, {"id": "main_node_exporter_refresh", "label": "refresh", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22546"}, {"id": "main_node_exporter_schemaversion", "label": "schemaVersion", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22547"}, {"id": "main_node_exporter_style", "label": "style", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22548"}, {"id": "main_node_exporter_tags", "label": "tags", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22549"}, {"id": "main_node_exporter_templating", "label": "templating", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22550"}, {"id": "main_node_exporter_templating_list", "label": "list", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22551"}, {"id": "main_node_exporter_time", "label": "time", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22645"}, {"id": "main_node_exporter_time_from", "label": "from", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22646"}, {"id": "main_node_exporter_time_to", "label": "to", "file_type": "code", "source_file": "ansible/roles/observer/files/grafana/provisioning/dashboards/main/node-exporter.json", "source_location": "L22647"}, {"id": "main_node_exporter_timepicker", "laLine truncated
|
||||
Reference in new issue
Block a user