From d6547b01e4af7aeb3ae122a67804529a417b44d3 Mon Sep 17 00:00:00 2001 From: Neal Probert Date: Wed, 1 Sep 2021 15:49:01 -0400 Subject: [PATCH] Added CarPC setup/install --- CarPC/README.txt | 17 + CarPC/carpc-setup.sh | 103 +++ CarPC/etc/can.conf | 4 + CarPC/etc/default/gpsd | 14 + CarPC/etc/default/ptpd | 7 + CarPC/etc/hosts | 33 + CarPC/etc/init/x11vnc.conf | 5 + CarPC/etc/ld.so.conf.d/cvehicle.conf | 2 + CarPC/etc/ld.so.conf.d/pstar.conf | 2 + CarPC/etc/ntp.conf | 79 ++ CarPC/etc/ptpd2.conf | 841 ++++++++++++++++++ CarPC/etc/rc.local | 33 + .../multi-user.target.wants/gpsd.service | 15 + .../system/sockets.target.wants/gpsd.socket | 11 + CarPC/etc/x11vnc.pass | 1 + CarPC/lib/systemd/system/rc-local.service | 21 + CarPC/x11vnc-setup.sh | 25 + 17 files changed, 1213 insertions(+) create mode 100644 CarPC/README.txt create mode 100755 CarPC/carpc-setup.sh create mode 100644 CarPC/etc/can.conf create mode 100644 CarPC/etc/default/gpsd create mode 100644 CarPC/etc/default/ptpd create mode 100644 CarPC/etc/hosts create mode 100644 CarPC/etc/init/x11vnc.conf create mode 100644 CarPC/etc/ld.so.conf.d/cvehicle.conf create mode 100644 CarPC/etc/ld.so.conf.d/pstar.conf create mode 100644 CarPC/etc/ntp.conf create mode 100644 CarPC/etc/ptpd2.conf create mode 100644 CarPC/etc/rc.local create mode 100644 CarPC/etc/systemd/system/multi-user.target.wants/gpsd.service create mode 100644 CarPC/etc/systemd/system/sockets.target.wants/gpsd.socket create mode 100644 CarPC/etc/x11vnc.pass create mode 100644 CarPC/lib/systemd/system/rc-local.service create mode 100755 CarPC/x11vnc-setup.sh diff --git a/CarPC/README.txt b/CarPC/README.txt new file mode 100644 index 0000000..c2a925f --- /dev/null +++ b/CarPC/README.txt @@ -0,0 +1,17 @@ + + Kubuntu/Xubuntu (Debian) Setup + ============================== + +Open a console window, and run the following commands. + +sudo apt-get update +sudo install git subversion +mkdir NTCNA +cd NTCNA +svn co https://www.probestar.com/NTCNA/CVehicle (password is temppwd) +cd NTCNA/CVehicle/trunk/platforms/bboneb +./carpc-setup.sh + +Takes awhile till it is done. There is a lot of software to install. + +Adjust start_v2v.sh link as needed, re-run to run the right apps. diff --git a/CarPC/carpc-setup.sh b/CarPC/carpc-setup.sh new file mode 100755 index 0000000..d6c1b65 --- /dev/null +++ b/CarPC/carpc-setup.sh @@ -0,0 +1,103 @@ +#!/bin/sh + +# copy config files +for i in etc lib usr +do + if [ -d $i ]; then + sudo cp -r $i/* /$i/ + fi +done +cp -r home/pi/.* /home/pi/ + +# network +echo "Edit networking via control panel" + +# update & clean +sudo apt-get update +sudo apt-get dist-upgrade +sudo apt-get install -y ntpdate subversion git cmake +sudo apt-get -y autoremove +sudo apt-get clean + +# Need rc.local to start CAN and BSMPd +sudo systemctl enable rc-local.service +if [ ! -f /etc/init/x11vnc.conf ]; then + sudo systemctl enable x11vnc.service +fi + +# time +sudo ntpdate pool.ntp.org +sudo hwclock -w +sudo apt-get update + +# clone/pull +mkdir -p $HOME/ProbeStar +cd $HOME/ProbeStar +for i in git_tools linux_tools pi_tools Cnomicon Pynomicon +do + if [ -d $i ]; then + cd $i + git config credential.helper store + git pull --recurse-submodules + cd .. + else + git clone https://github.com/nprobert/$i --recurse-submodules + fi +done +cd $HOME +for i in ProbeStar/*; do + ln -fs $i +done +mkdir bin +cp linux_tools/bin/* bin/ + +# checkouts +mkdir -p $HOME/NTCNA +cd $HOME/NTCNA +for i in CVehicle PyVehicle +do + if [ -d $i ]; then + cd $i + git config credential.helper store + git pull --recurse-submodules + cd .. + else + git clone https://github.com/nprobert/$i --recurse-submodules + fi +done +cd $HOME +for i in NTCNA/*; do + ln -fs $i +done + +# packages & builds +if [ -d $HOME/ProbeStar/Cnomicon ]; then + cd $HOME/Cnomicon/packages + ./packages.sh + cd .. + ./cbuild.sh + ./cinstall.sh +fi + +if [ -d $HOME/NTCNA/CVehicle ]; then + cd $HOME/CVehicle/packages + ./packages.sh + cd .. + ./cbuild.sh + ./cinstall.sh +fi + +# python stuff +cd $HOME/NTCNA/Pynomicon/packages +./packages.sh +chmod +x $HOME/Pynomicon/bin/*.sh +cd $HOME/NTCNA/PyVehicle/packages +./packages.sh +chmod +x $HOME/PyVehicle/bin/*.sh + +# cleanup +chmod go+rwx /etc/x11vnc.pass +sudo adduser $USER dialout + +git config --global user.email "nprobert@probestar.net" +git config --global user.name "Neal Probert" diff --git a/CarPC/etc/can.conf b/CarPC/etc/can.conf new file mode 100644 index 0000000..c0b476a --- /dev/null +++ b/CarPC/etc/can.conf @@ -0,0 +1,4 @@ +[default] +interface = socketcan_native +channel = can0 + diff --git a/CarPC/etc/default/gpsd b/CarPC/etc/default/gpsd new file mode 100644 index 0000000..d7434c6 --- /dev/null +++ b/CarPC/etc/default/gpsd @@ -0,0 +1,14 @@ +# Default settings for the gpsd init script and the hotplug wrapper. + +# Start the gpsd daemon automatically at boot time +START_DAEMON="true" + +# Use USB hotplugging to add new USB devices automatically to the daemon +USBAUTO="true" + +# Devices gpsd should collect to at boot time. +# They need to be read/writeable, either by user gpsd or the group dialout. +DEVICES="/dev/ttyACM0" + +# Other options you want to pass to gpsd +GPSD_OPTIONS="-G" diff --git a/CarPC/etc/default/ptpd b/CarPC/etc/default/ptpd new file mode 100644 index 0000000..bcd535d --- /dev/null +++ b/CarPC/etc/default/ptpd @@ -0,0 +1,7 @@ +# /etc/default/ptpd + +# Set to "yes" to actually start ptpd automatically +START_DAEMON=yes + +# Add command line options for ptpd +PTPD_OPTS="-c /etc/ptpd2.conf" diff --git a/CarPC/etc/hosts b/CarPC/etc/hosts new file mode 100644 index 0000000..1fefde3 --- /dev/null +++ b/CarPC/etc/hosts @@ -0,0 +1,33 @@ +127.0.0.1 localhost +127.0.1.1 carpc + +# infrastructure network +192.168.0.40 rse rsu +192.168.0.15 rsupc + +# vehicle network +192.168.2.1 router +192.168.2.2 wsu obe obu +192.168.2.10 mabx2 +192.168.2.12 pi pi1 +192.168.2.15 carpc +192.168.2.98 winpc +192.168.2.99 linpc + +# BBB +192.168.7.2 bbb-usb + +# C-V2X +192.168.12.41 cv2x-1 +192.168.12.42 cv2x-2 + +# bench +10.1.1.99 cvehicle +10.1.1.200 ptsserver + +# The following lines are desirable for IPv6 capable hosts +::1 ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters diff --git a/CarPC/etc/init/x11vnc.conf b/CarPC/etc/init/x11vnc.conf new file mode 100644 index 0000000..8ed1839 --- /dev/null +++ b/CarPC/etc/init/x11vnc.conf @@ -0,0 +1,5 @@ +start on login-session-start +script +/usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -rfbauth /etc/x11vnc.pass -forever -bg -rfbport 5900 -o /var/log/x11vnc.log +end script + diff --git a/CarPC/etc/ld.so.conf.d/cvehicle.conf b/CarPC/etc/ld.so.conf.d/cvehicle.conf new file mode 100644 index 0000000..5c28b76 --- /dev/null +++ b/CarPC/etc/ld.so.conf.d/cvehicle.conf @@ -0,0 +1,2 @@ +# NTCNA CVehicle library +/usr/local/cvehicle/lib diff --git a/CarPC/etc/ld.so.conf.d/pstar.conf b/CarPC/etc/ld.so.conf.d/pstar.conf new file mode 100644 index 0000000..eb49e99 --- /dev/null +++ b/CarPC/etc/ld.so.conf.d/pstar.conf @@ -0,0 +1,2 @@ +# other libs +/usr/local/pstar/lib diff --git a/CarPC/etc/ntp.conf b/CarPC/etc/ntp.conf new file mode 100644 index 0000000..41b34fd --- /dev/null +++ b/CarPC/etc/ntp.conf @@ -0,0 +1,79 @@ +# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help + +driftfile /var/lib/ntp/ntp.drift + +# Leap seconds definition provided by tzdata +leapfile /usr/share/zoneinfo/leap-seconds.list + +# Enable this if you want statistics to be logged. +#statsdir /var/log/ntpstats/ + +statistics loopstats peerstats clockstats +filegen loopstats file loopstats type day enable +filegen peerstats file peerstats type day enable +filegen clockstats file clockstats type day enable + +# Specify one or more NTP servers. + +# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board +# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for +# more information. +#pool 0.ubuntu.pool.ntp.org iburst +#pool 1.ubuntu.pool.ntp.org iburst +#pool 2.ubuntu.pool.ntp.org iburst +#pool 3.ubuntu.pool.ntp.org iburst +pool us.pool.ntp.org iburst + +# Use Ubuntu's ntp server as a fallback. +#pool ntp.ubuntu.com + +# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for +# details. The web page +# might also be helpful. +# +# Note that "restrict" applies to both servers and clients, so a configuration +# that might be intended to block requests from certain clients could also end +# up blocking replies from your own upstream servers. + +# By default, exchange time with everybody, but don't allow configuration. +restrict -4 default kod notrap nomodify nopeer noquery limited +restrict -6 default kod notrap nomodify nopeer noquery limited + +# Local users may interrogate the ntp server more closely. +restrict -4 127.0.0.1 +restrict -6 ::1 + +# Needed for adding pool entries +restrict source notrap nomodify noquery + +# Clients from this (example!) subnet have unlimited access, but only if +# cryptographically authenticated. +#restrict 192.168.123.0 mask 255.255.255.0 notrust + + +# If you want to provide time to your local subnet, change the next line. +# (Again, the address is an example only.) +#broadcast 192.168.123.255 + +# If you want to listen to time broadcasts on your local subnet, de-comment the +# next lines. Please do this only if you trust everybody on the network! +#disable auth +#broadcastclient + +#Changes recquired to use pps synchonisation as explained in documentation: +#http://www.ntp.org/ntpfaq/NTP-s-config-adv.htm#AEN3918 + +#server 127.127.8.1 mode 135 prefer # Meinberg GPS167 with PPS +#fudge 127.127.8.1 time1 0.0042 # relative to PPS for my hardware + +#server 127.127.22.1 # ATOM(PPS) +#fudge 127.127.22.1 flag3 1 # enable PPS API + +# GPS Serial data reference (NTP0) +server 127.127.28.0 +fudge 127.127.28.0 time1 0.9999 refid GPS + +# GPS PPS reference (NTP1) +server 127.127.28.1 +fudge 127.127.28.1 refid PPS + diff --git a/CarPC/etc/ptpd2.conf b/CarPC/etc/ptpd2.conf new file mode 100644 index 0000000..bd97f32 --- /dev/null +++ b/CarPC/etc/ptpd2.conf @@ -0,0 +1,841 @@ +; ======================================== +; PTPDv2 version 2.3.2 default configuration +; ======================================== + +; NOTE: the following settings are affected by ptpengine:preset selection: +; ptpengine:slave_only +; clock:no_adjust +; ptpengine:clock_class - allowed range and default value +; To see all preset settings, run ptpd2 -H (--long-help) + +; Network interface to use - eth0, igb0 etc. (required). +ptpengine:interface = enp1s0 + +; Backup network interface to use - eth0, igb0 etc. When no GM available, +; slave will keep alternating between primary and secondary until a GM is found. +; +ptpengine:backup_interface = + +; PTP engine preset: +; none = Defaults, no clock class restrictions +; masteronly = Master, passive when not best master (clock class 0..127) +; masterslave = Full IEEE 1588 implementation: +; Master, slave when not best master +; (clock class 128..254) +; slaveonly = Slave only (clock class 255 only) +; +; Options: none masteronly masterslave slaveonly +ptpengine:preset = masteronly + +; Transport type for PTP packets. Ethernet transport requires libpcap support. +; Options: ipv4 ethernet +ptpengine:transport = ipv4 + +; Enable TransportSpecific field compatibility with 802.1AS / AVB (requires Ethernet transport) +ptpengine:dot1as = N + +; Disable PTP port. Causes the PTP state machine to stay in PTP_DISABLED state indefinitely, +; until it is re-enabled via configuration change or ENABLE_PORT management message. +ptpengine:disabled = N + +; IP transmission mode (requires IP transport) - hybrid mode uses +; multicast for sync and announce, and unicast for delay request and +; response; unicast mode uses unicast for all transmission. +; When unicast mode is selected, destination IP(s) may need to be configured +; (ptpengine:unicast_destinations). +; Options: multicast unicast hybrid +ptpengine:ip_mode = multicast + +; Enable unicast negotiation support using signaling messages +; +ptpengine:unicast_negotiation = N + +; When using unicast negotiation (slave), accept PTP messages from any master. +; By default, only messages from acceptable masters (ptpengine:unicast_destinations) +; are accepted, and only if transmission was granted by the master +; +ptpengine:unicast_any_master = N + +; PTP port number wildcard mask applied onto port identities when running +; unicast negotiation: allows multiple port identities to be accepted as one. +; This option can be used as a workaround where a node sends signaling messages and +; timing messages with different port identities +ptpengine:unicast_port_mask = 0 + +; Disable Best Master Clock Algorithm for unicast masters: +; Only effective for masteronly preset - all Announce messages +; will be ignored and clock will transition directly into MASTER state. +; +ptpengine:disable_bmca = N + +; When unicast negotiation enabled on a master clock, +; reply to transmission requests also in LISTENING state. +ptpengine:unicast_negotiation_listening = N + +; Use libpcap for sending and receiving traffic (automatically enabled +; in Ethernet mode). +ptpengine:use_libpcap = N + +; Disable UDP checksum validation on UDP sockets (Linux only). +; Workaround for situations where a node (like Transparent Clock). +; does not rewrite checksums +; +ptpengine:disable_udp_checksums = Y + +; Delay detection mode used - use DELAY_DISABLED for syntonisation only +; (no full synchronisation). +; Options: E2E P2P DELAY_DISABLED +ptpengine:delay_mechanism = E2E + +; PTP domain number. +ptpengine:domain = 0 + +; PTP port number (part of PTP Port Identity - not UDP port). +; For ordinary clocks (single port), the default should be used, +; but when running multiple instances to simulate a boundary clock, +; The port number can be changed. +ptpengine:port_number = 1 + +; Port description (returned in the userDescription field of PORT_DESCRIPTION management message and USER_DESCRIPTION management message) - maximum 64 characters +ptpengine:port_description = ptpd + +; Usability extension: if enabled, a slave-only clock will accept +; masters from any domain, while preferring the configured domain, +; and preferring lower domain number. +; NOTE: this behaviour is not part of the standard. +ptpengine:any_domain = N + +; Slave only mode (sets clock class to 255, overriding value from preset). +ptpengine:slave_only = N + +; Specify latency correction (nanoseconds) for incoming packets. +ptpengine:inbound_latency = 0 + +; Specify latency correction (nanoseconds) for outgoing packets. +ptpengine:outbound_latency = 0 + +; Apply an arbitrary shift (nanoseconds) to offset from master when +; in slave state. Value can be positive or negative - useful for +; correcting for antenna latencies, delay assymetry +; and IP stack latencies. This will not be visible in the offset +; from master value - only in the resulting clock correction. +ptpengine:offset_shift = 0 + +; Compatibility option: In slave state, always respect UTC offset +; announced by best master, even if the the +; currrentUtcOffsetValid flag is announced FALSE. +; NOTE: this behaviour is not part of the standard. +ptpengine:always_respect_utc_offset = Y + +; Compatibility extension to BMC algorithm: when enabled, +; BMC for both master and save clocks will prefer masters +; nannouncing currrentUtcOffsetValid as TRUE. +; NOTE: this behaviour is not part of the standard. +ptpengine:prefer_utc_offset_valid = N + +; Compatibility option: when enabled, ptpd2 will ignore +; Announce messages from masters announcing currentUtcOffsetValid +; as FALSE. +; NOTE: this behaviour is not part of the standard. +ptpengine:require_utc_offset_valid = N + +; Time (seconds) unicast messages are requested for by slaves +; when using unicast negotiation, and maximum time unicast message +; transmission is granted to slaves by masters +; +ptpengine:unicast_grant_duration = 300 + +; PTP announce message interval in master state. When using unicast negotiation, for +; slaves this is the minimum interval requested, and for masters +; this is the only interval granted. +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_announce_interval = 1 + +; Maximum Announce message interval requested by slaves when using unicast negotiation, +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_announce_interval_max = 5 + +; PTP announce receipt timeout announced in master state. +ptpengine:announce_receipt_timeout = 6 + +; PTP announce receipt timeout grace period in slave state: +; when announce receipt timeout occurs, disqualify current best GM, +; then wait n times announce receipt timeout before resetting. +; Allows for a seamless GM failover when standby GMs are slow +; to react. When set to 0, this option is not used. +ptpengine:announce_receipt_grace_period = 0 + +; PTP sync message interval in master state. When using unicast negotiation, for +; slaves this is the minimum interval requested, and for masters +; this is the only interval granted. +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_sync_interval = 0 + +; Maximum Sync message interval requested by slaves when using unicast negotiation, +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_sync_interval_max = 5 + +; Override the Delay Request interval announced by best master. +ptpengine:log_delayreq_override = N + +; Automatically override the Delay Request interval +; if the announced value is 127 (0X7F), such as in +; unicast messages (unless using unicast negotiation) +ptpengine:log_delayreq_auto = Y + +; Delay request interval used before receiving first delay response +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_delayreq_interval_initial = 0 + +; Minimum delay request interval announced when in master state, +; in slave state overrides the master interval, +; required in hybrid mode. When using unicast negotiation, for +; slaves this is the minimum interval requested, and for masters +; this is the minimum interval granted. +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_delayreq_interval = 0 + +; Maximum Delay Response interval requested by slaves when using unicast negotiation, +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_delayreq_interval_max = 5 + +; Minimum peer delay request message interval in peer to peer delay mode. +; When using unicast negotiation, this is the minimum interval requested, +; and the only interval granted. +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_peer_delayreq_interval = 1 + +; Maximum Peer Delay Response interval requested by slaves when using unicast negotiation, +; (expressed as log 2 i.e. -1=0.5s, 0=1s, 1=2s etc.) +ptpengine:log_peer_delayreq_interval_max = 5 + +; Foreign master record size (Maximum number of foreign masters). +ptpengine:foreignrecord_capacity = 5 + +; Specify Allan variance announced in master state. +ptpengine:ptp_allan_variance = 65535 + +; Clock accuracy range announced in master state. +; Options: ACC_25NS ACC_100NS ACC_250NS ACC_1US ACC_2_5US ACC_10US ACC_25US ACC_100US ACC_250US ACC_1MS ACC_2_5MS ACC_10MS ACC_25MS ACC_100MS ACC_250MS ACC_1S ACC_10S ACC_10SPLUS ACC_UNKNOWN +ptpengine:ptp_clock_accuracy = ACC_UNKNOWN + +; Underlying time source UTC offset announced in master state. +ptpengine:utc_offset = 0 + +; Underlying time source UTC offset validity announced in master state. +ptpengine:utc_offset_valid = N + +; Underlying time source time traceability announced in master state. +ptpengine:time_traceable = N + +; Underlying time source frequency traceability announced in master state. +ptpengine:frequency_traceable = N + +; Time scale announced in master state (with ARB, UTC properties +; are ignored by slaves). When clock class is set to 13 (application +; specific), this value is ignored and ARB is used. +; Options: PTP ARB +ptpengine:ptp_timescale = PTP + +; Time source announced in master state. +; Options: ATOMIC_CLOCK GPS TERRESTRIAL_RADIO PTP NTP HAND_SET OTHER INTERNAL_OSCILLATOR +ptpengine:ptp_timesource = NTP + +; Clock class - announced in master state. Always 255 for slave-only. +; Minimum, maximum and default values are controlled by presets. +; If set to 13 (application specific time source), announced +; time scale is always set to ARB. This setting controls the +; states a PTP port can be in. If below 128, port will only +; be in MASTER or PASSIVE states (master only). If above 127, +; port will be in MASTER or SLAVE states. +ptpengine:clock_class = 0 + +; Priority 1 announced in master state,used for Best Master +; Clock selection. +ptpengine:priority1 = 128 + +; Priority 2 announced in master state, used for Best Master +; Clock selection. +ptpengine:priority2 = 128 + +; Number of consecutive resets to LISTENING before full network reset +; +ptpengine:max_listen = 5 + +; Specify unicast slave addresses for unicast master operation, or unicast +; master addresses for slave operation. Format is similar to an ACL: comma, +; tab or space-separated IPv4 unicast addresses, one or more. For a slave, +; when unicast negotiation is used, setting this is mandatory. +ptpengine:unicast_destinations = + +; Specify PTP domain number for each configured unicast destination (ptpengine:unicast_destinations). +; This is only used by slave-only clocks using unicast destinations to allow for each master +; to be in a separate domain, such as with Telecom Profile. The number of entries should match the number +; of unicast destinations, otherwise unconfigured domains or domains set to 0 are set to domain configured in +; ptpengine:domain. The format is a comma, tab or space-separated list of 8-bit unsigned integers (0 .. 255) +ptpengine:unicast_domains = + +; Specify a local preference for each configured unicast destination (ptpengine:unicast_destinations). +; This is only used by slave-only clocks using unicast destinations to allow for each master's +; BMC selection to be influenced by the slave, such as with Telecom Profile. The number of entries should match the number +; of unicast destinations, otherwise unconfigured preference is set to 0 (highest). +; The format is a comma, tab or space-separated list of 8-bit unsigned integers (0 .. 255) +ptpengine:unicast_local_preference = + +; Specify peer unicast adress for P2P unicast. Mandatory when +; running unicast mode and P2P delay mode. +ptpengine:unicast_peer_destination = + +; Enable handling of PTP management messages. +ptpengine:management_enable = Y + +; Accept SET and COMMAND management messages. +ptpengine:management_set_enable = N + +; Send explicit IGMP joins between engine resets and periodically +; in master state. +ptpengine:igmp_refresh = Y + +; Periodic IGMP join interval (seconds) in master state when running +; IPv4 multicast: when set below 10 or when ptpengine:igmp_refresh +; is disabled, this setting has no effect. +ptpengine:master_igmp_refresh_interval = 60 + +; Multicast time to live for multicast PTP packets (ignored and set to 1 +; for peer to peer messages). +ptpengine:multicast_ttl = 64 + +; DiffServ CodepPoint for packet prioritisation (decimal). When set to zero, +; this option is not used. Use 46 for Expedited Forwarding (0x2e). +ptpengine:ip_dscp = 0 + +; Enable statistical filter for Sync messages. +ptpengine:sync_stat_filter_enable = N + +; Type of filter used for Sync message filtering +; Options: none mean min max absmin absmax median +ptpengine:sync_stat_filter_type = min + +; Number of samples used for the Sync statistical filter +ptpengine:sync_stat_filter_window = 4 + +; Sample window type used for Sync message statistical filter. Delay Response outlier filter action. +; Sliding window is continuous, interval passes every n-th sample only. +; Options: sliding interval +ptpengine:sync_stat_filter_window_type = sliding + +; Enable statistical filter for Delay messages. +ptpengine:delay_stat_filter_enable = N + +; Type of filter used for Delay message statistical filter +; Options: none mean min max absmin absmax median +ptpengine:delay_stat_filter_type = min + +; Number of samples used for the Delay statistical filter +ptpengine:delay_stat_filter_window = 4 + +; Sample window type used for Delay message statistical filter +; Sliding window is continuous, interval passes every n-th sample only +; Options: sliding interval +ptpengine:delay_stat_filter_window_type = sliding + +; Enable outlier filter for the Delay Response component in slave state +ptpengine:delay_outlier_filter_enable = N + +; Delay Response outlier filter action. If set to 'filter', outliers are +; replaced with moving average. +; Options: discard filter +ptpengine:delay_outlier_filter_action = discard + +; Number of samples in the Delay Response outlier filter buffer +ptpengine:delay_outlier_filter_capacity = 20 + +; Delay Response outlier filter threshold (: multiplier for Peirce's maximum +; standard deviation. When set below 1.0, filter is tighter, when set above +; 1.0, filter is looser than standard Peirce's test. +; When autotune enabled, this is the starting threshold. +ptpengine:delay_outlier_filter_threshold = 1.000000 + +; Always run the Delay Response outlier filter, even if clock is being slewed at maximum rate +ptpengine:delay_outlier_filter_always_filter = N + +; Enable automatic threshold control for Delay Response outlier filter. +ptpengine:delay_outlier_filter_autotune_enable = Y + +; Delay Response outlier filter autotune low watermark - minimum percentage +; of discarded samples in the update period before filter is tightened +; by the autotune step value. +ptpengine:delay_outlier_filter_autotune_minpercent = 20 + +; Delay Response outlier filter autotune high watermark - maximum percentage +; of discarded samples in the update period before filter is loosened +; by the autotune step value. +ptpengine:delay_outlier_filter_autotune_maxpercent = 95 + +; The value the Delay Response outlier filter threshold is increased +; or decreased by when auto-tuning. +ptpengine:delay_outlier_autotune_step = 0.100000 + +; Minimum Delay Response filter threshold value used when auto-tuning +ptpengine:delay_outlier_filter_autotune_minthreshold = 0.100000 + +; Maximum Delay Response filter threshold value used when auto-tuning +ptpengine:delay_outlier_filter_autotune_maxthreshold = 5.000000 + +; Enable Delay filter step detection (delaySM) to block when certain level exceeded +ptpengine:delay_outlier_filter_stepdetect_enable = N + +; Delay Response step detection threshold. Step detection is performed +; only when delaySM is below this threshold (nanoseconds) +ptpengine:delay_outlier_filter_stepdetect_threshold = 1000000 + +; Delay Response step level. When step detection enabled and operational, +; delaySM above this level (nanosecond) is considered a clock step and updates are paused +ptpengine:delay_outlier_filter_stepdetect_level = 500000 + +; Initial credit (number of samples) the Delay step detection filter can block for +; When credit is exhausted, filter stops blocking. Credit is gradually restored +ptpengine:delay_outlier_filter_stepdetect_credit = 200 + +; Amount of credit for the Delay step detection filter restored every full sample window +ptpengine:delay_outlier_filter_stepdetect_credit_increment = 10 + +; Delay Response outlier weight: if an outlier is detected, determines +; the amount of its deviation from mean that is used to build the standard +; deviation statistics and influence further outlier detection. +; When set to 1.0, the outlier is used as is. +ptpengine:delay_outlier_weight = 1.000000 + +; Enable outlier filter for the Sync component in slave state. +ptpengine:sync_outlier_filter_enable = N + +; Sync outlier filter action. If set to 'filter', outliers are replaced +; with moving average. +; Options: discard filter +ptpengine:sync_outlier_filter_action = discard + +; Number of samples in the Sync outlier filter buffer. +ptpengine:sync_outlier_filter_capacity = 20 + +; Sync outlier filter threshold: multiplier for the Peirce's maximum standard +; deviation. When set below 1.0, filter is tighter, when set above 1.0, +; filter is looser than standard Peirce's test. +ptpengine:sync_outlier_filter_threshold = 1.000000 + +; Always run the Sync outlier filter, even if clock is being slewed at maximum rate +ptpengine:sync_outlier_filter_always_filter = N + +; Enable automatic threshold control for Sync outlier filter. +ptpengine:sync_outlier_filter_autotune_enable = Y + +; Sync outlier filter autotune low watermark - minimum percentage +; of discarded samples in the update period before filter is tightened +; by the autotune step value. +ptpengine:sync_outlier_filter_autotune_minpercent = 20 + +; Sync outlier filter autotune high watermark - maximum percentage +; of discarded samples in the update period before filter is loosened +; by the autotune step value. +ptpengine:sync_outlier_filter_autotune_maxpercent = 95 + +; Value the Sync outlier filter threshold is increased +; or decreased by when auto-tuning. +ptpengine:sync_outlier_autotune_step = 0.100000 + +; Minimum Sync outlier filter threshold value used when auto-tuning +ptpengine:sync_outlier_filter_autotune_minthreshold = 0.100000 + +; Maximum Sync outlier filter threshold value used when auto-tuning +ptpengine:sync_outlier_filter_autotune_maxthreshold = 5.000000 + +; Enable Sync filter step detection (delayMS) to block when certain level exceeded. +ptpengine:sync_outlier_filter_stepdetect_enable = N + +; Sync step detection threshold. Step detection is performed +; only when delayMS is below this threshold (nanoseconds) +ptpengine:sync_outlier_filter_stepdetect_threshold = 1000000 + +; Sync step level. When step detection enabled and operational, +; delayMS above this level (nanosecond) is considered a clock step and updates are paused +ptpengine:sync_outlier_filter_stepdetect_level = 500000 + +; Initial credit (number of samples) the Sync step detection filter can block for. +; When credit is exhausted, filter stops blocking. Credit is gradually restored +ptpengine:sync_outlier_filter_stepdetect_credit = 200 + +; Amount of credit for the Sync step detection filter restored every full sample window +ptpengine:sync_outlier_filter_stepdetect_credit_increment = 10 + +; Sync outlier weight: if an outlier is detected, this value determines the +; amount of its deviation from mean that is used to build the standard +; deviation statistics and influence further outlier detection. +; When set to 1.0, the outlier is used as is. +ptpengine:sync_outlier_weight = 1.000000 + +; Delay between moving to slave state and enabling clock updates (seconds). +; This allows one-way delay to stabilise before starting clock updates. +; Activated when going into slave state and during slave's GM failover. +; 0 - not used. +ptpengine:calibration_delay = 0 + +; PTP idle timeout: if PTPd is in SLAVE state and there have been no clock +; updates for this amout of time, PTPd releases clock control. +; +ptpengine:idle_timeout = 120 + +; Enable panic mode: when offset from master is above 1 second, stop updating +; the clock for a period of time and then step the clock if offset remains +; above 1 second. +ptpengine:panic_mode = N + +; Duration (minutes) of the panic mode period (no clock updates) when offset +; above 1 second detected. +ptpengine:panic_mode_duration = 2 + +; When entering panic mode, release clock control while panic mode lasts +; if ntpengine:* configured, this will fail over to NTP, +; if not set, PTP will hold clock control during panic mode. +ptpengine:panic_mode_release_clock = N + +; Do not exit panic mode until offset drops below this value (nanoseconds). +; 0 = not used. +ptpengine:panic_mode_exit_threshold = 0 + +; Use PTPd's process ID as the middle part of the PTP clock ID - useful for running multiple instances. +ptpengine:pid_as_clock_identity = N + +; Fail over to NTP when PTP time sync not available - requires +; ntpengine:enabled, but does not require the rest of NTP configuration: +; will warn instead of failing over if cannot control ntpd. +ptpengine:ntp_failover = N + +; NTP failover timeout in seconds: time between PTP slave going into +; LISTENING state, and releasing clock control. 0 = fail over immediately. +ptpengine:ntp_failover_timeout = 120 + +; Prefer NTP time synchronisation. Only use PTP when NTP not available, +; could be used when NTP runs with a local GPS receiver or another reference +ptpengine:prefer_ntp = Y + +; Legacy option from 2.3.0: same as ptpengine:panic_mode_release_clock +ptpengine:panic_mode_ntp = N + +; Clear counters after dumping all counter values on SIGUSR2. +ptpengine:sigusr2_clears_counters = N + +; Permit access control list for timing packets. Format is a series of +; comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, +; where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the +; subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the +; incoming messages. IP access lists are only supported when using the IP transport. +ptpengine:timing_acl_permit = + +; Deny access control list for timing packets. Format is a series of +; comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, +; where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the +; subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the +; incoming messages. IP access lists are only supported when using the IP transport. +ptpengine:timing_acl_deny = + +; Permit access control list for management messages. Format is a series of +; comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, +; where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the +; subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the +; incoming messages. IP access lists are only supported when using the IP transport. +ptpengine:management_acl_permit = + +; Deny access control list for management messages. Format is a series of +; comma, space or tab separated network prefixes: IPv4 addresses or full CIDR notation a.b.c.d/x, +; where a.b.c.d is the subnet and x is the decimal mask, or a.b.c.d/v.x.y.z where a.b.c.d is the +; subnet and v.x.y.z is the 4-octet mask. The match is performed on the source IP address of the +; incoming messages. IP access lists are only supported when using the IP transport. +ptpengine:management_acl_deny = + +; Order in which permit and deny access lists are evaluated for timing +; packets, the evaluation process is the same as for Apache httpd. +; Options: permit-deny deny-permit +ptpengine:timing_acl_order = deny-permit + +; Order in which permit and deny access lists are evaluated for management +; messages, the evaluation process is the same as for Apache httpd. +; Options: permit-deny deny-permit +ptpengine:management_acl_order = deny-permit + +; Do not adjust the clock +clock:no_adjust = N + +; Do not step the clock - only slew +clock:no_reset = N + +; Force clock step on first sync after startup regardless of offset and clock:no_reset +clock:step_startup_force = N + +; Step clock on startup if offset >= 1 second, ignoring +; panic mode and clock:no_reset +clock:step_startup = N + +; Attempt setting the RTC when stepping clock (Linux only - FreeBSD does +; this for us. WARNING: this will always set the RTC to OS clock time, +; regardless of time zones, so this assumes that RTC runs in UTC or +; at least in the same timescale as PTP. true at least on most +; single-boot x86 Linux systems. +clock:set_rtc_on_step = N + +; Observed drift handling method between servo restarts: +; reset: set to zero (not recommended) +; preserve: use kernel value, +; file: load/save to drift file on startup/shutdown, use kernel +; value inbetween. To specify drift file, use the clock:drift_file setting. +; Options: reset preserve file +clock:drift_handling = preserve + +; Specify drift file +clock:drift_file = /etc/ptpd2_kernelclock.drift + +; Time (seconds) before and after midnight that clock updates should pe suspended for +; during a leap second event. The total duration of the pause is twice +; the configured duration +clock:leap_second_pause_period = 5 + +; Time (seconds) before midnight that PTPd starts announcing the leap second +; if it's running as master +clock:leap_second_notice_period = 43200 + +; Specify leap second file location - up to date version can be downloaded from +; http://www.ietf.org/timezones/data/leap-seconds.list +clock:leap_seconds_file = + +; Behaviour during a leap second event: +; accept: inform the OS kernel of the event +; ignore: do nothing - ends up with a 1-second offset which is then slewed +; step: similar to ignore, but steps the clock immediately after the leap second event +; smear: do not inform kernel, gradually introduce the leap second before the event +; by modifying clock offset (see clock:leap_second_smear_period) +; Options: accept ignore step smear +clock:leap_second_handling = accept + +; Time period (Seconds) over which the leap second is introduced before the event. +; Example: when set to 86400 (24 hours), an extra 11.5 microseconds is added every second +clock:leap_second_smear_period = 86400 + +; Maximum absolute frequency shift which can be applied to the clock servo +; when slewing the clock. Expressed in parts per million (1 ppm = shift of +; 1 us per second. Values above 512 will use the tick duration correction +; to allow even faster slewing. Default maximum is 512 without using tick. +clock:max_offset_ppm = 500 + +; One-way delay filter stiffness. +servo:delayfilter_stiffness = 6 + +; Clock servo PI controller proportional component gain (kP). +servo:kp = 0.100000 + +; Clock servo PI controller integral component gain (kI). +servo:ki = 0.001000 + +; How servo update interval (delta t) is calculated: +; none: servo not corrected for update interval (dt always 1), +; constant: constant value (target servo update rate - sync interval for PTP, +; measured: servo measures how often it's updated and uses this interval. +; Options: none constant measured +servo:dt_method = constant + +; Maximum servo update interval (delta t) when using measured servo update interval +; (servo:dt_method = measured), specified as sync interval multiplier. +servo:dt_max = 5.000000 + +; Enable clock synchronisation servo stability detection +; (based on standard deviation of the observed drift value) +; - drift will be saved to drift file / cached when considered stable, +; also clock stability status will be logged. +servo:stability_detection = N + +; Specify the observed drift standard deviation threshold in parts per +; billion (ppb) - if stanard deviation is within the threshold, servo +; is considered stable. +servo:stability_threshold = 10.000000 + +; Specify for how many statistics update intervals the observed drift +; standard deviation has to stay within threshold to be considered stable. +servo:stability_period = 1 + +; Specify after how many minutes without stabilisation servo is considered +; unstable. Assists with logging servo stability information and +; allows to preserve observed drift if servo cannot stabilise. +; +servo:stability_timeout = 10 + +; Do accept master to slave delay (delayMS - from Sync message) or slave to master delay +; (delaySM - from Delay messages) if greater than this value (nanoseconds). 0 = not used. +servo:max_delay = 0 + +; Maximum number of consecutive delay measurements exceeding maxDelay threshold, +; before slave is reset. +servo:max_delay_max_rejected = 0 + +; If servo:max_delay is set, perform the check only if clock servo has stabilised. +; +servo:max_delay_stable_only = N + +; When enabled, Sync messages will only be accepted if sequence ID is increasing. This is limited to 50 dropped messages. +; +ptpengine:sync_sequence_checking = N + +; If set to non-zero, timeout in seconds, after which the slave resets if no clock updates made. +; +ptpengine:clock_update_timeout = 0 + +; Do not reset the clock if offset from master is greater +; than this value (nanoseconds). 0 = not used. +servo:max_offset = 0 + +; Enable SNMP agent (if compiled with PTPD_SNMP). +global:enable_snmp = N + +; Send log messages to syslog. Disabling this +; sends all messages to stdout (or speficied log file). +global:use_syslog = N + +; Lock file location +global:lock_file = + +; Use mode specific and interface specific lock file +; (overrides global:lock_file). +global:auto_lockfile = N + +; Lock file directory: used with automatic mode-specific lock files, +; also used when no lock file is specified. When lock file +; is specified, it's expected to be an absolute path. +global:lock_directory = /var/run + +; Skip lock file checking and locking. +global:ignore_lock = N + +; File used to record data about sync packets. Enables recording when set. +global:quality_file = + +; Maximum sync packet record file size (in kB) - file will be truncated +; if size exceeds the limit. 0 - no limit. +global:quality_file_max_size = 0 + +; Enable log rotation of the sync packet record file up to n files. +; 0 - do not rotate. +; +global:quality_file_max_files = 0 + +; Truncate the sync packet record file every time it is (re) opened: +; startup and SIGHUP. +global:quality_file_truncate = N + +; File used to log ptpd2 status information. +global:status_file = /var/run/ptpd2.status + +; Enable / disable writing status information to file. +global:log_status = N + +; Status file update interval in seconds. +global:status_update_interval = 1 + +; Specify log file path (event log). Setting this enables logging to file. +global:log_file = /var/log/ptpd2.log + +; Maximum log file size (in kB) - log file will be truncated if size exceeds +; the limit. 0 - no limit. +global:log_file_max_size = 0 + +; Enable log rotation of the sync packet record file up to n files. +; 0 - do not rotate. +; +global:log_file_max_files = 0 + +; Truncate the log file every time it is (re) opened: startup and SIGHUP. +global:log_file_truncate = N + +; Specify log level (only messages at this priority or higer will be logged). +; The minimal level is LOG_ERR. LOG_ALL enables debug output if compiled with +; RUNTIME_DEBUG. +; Options: LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_ALL +global:log_level = LOG_ALL + +; Specify statistics log file path. Setting this enables logging of +; statistics, but can be overriden with global:log_statistics. +global:statistics_file = /var/log/ptpd2.stats + +; Log timing statistics every n seconds for Sync and Delay messages +; (0 - log all). +global:statistics_log_interval = 0 + +; Maximum statistics log file size (in kB) - log file will be truncated +; if size exceeds the limit. 0 - no limit. +global:statistics_file_max_size = 0 + +; Enable log rotation of the statistics file up to n files. 0 - do not rotate. +global:statistics_file_max_files = 0 + +; Truncate the statistics file every time it is (re) opened: startup and SIGHUP. +global:statistics_file_truncate = N + +; Dump the contents of every PTP packet +global:dump_packets = N + +; Run in foreground with statistics and all messages logged to stdout. +; Overrides log file and statistics file settings and disables syslog. +; +global:verbose_foreground = N + +; Run in foreground - ignored when global:verbose_foreground is set +global:foreground = N + +; Log timing statistics for every PTP packet received +; +global:log_statistics = Y + +; Timestamp format used when logging timing statistics +; (when global:log_statistics is enabled): +; datetime - formatttted date and time: YYYY-MM-DD hh:mm:ss.uuuuuu +; unix - Unix timestamp with nanoseconds: s.ns +; both - Formatted date and time, followed by unix timestamp +; (adds one extra field to the log) +; +; Options: datetime unix both +global:statistics_timestamp_format = datetime + +; Bind ptpd2 process to a selected CPU core number. +; 0 = first CPU core, etc. -1 = do not bind to a single core. +global:cpuaffinity_cpucore = -1 + +; Clock synchronisation statistics update interval in seconds +; +global:statistics_update_interval = 30 + +; Log a status update every time statistics are updated (global:statistics_update_interval). +; The updates are logged even when ptpd is configured without statistics support +global:periodic_updates = N + +; Delay (seconds) before releasing a time service (NTP or PTP) and electing a new one to control a clock. 0 = elect immediately +; +global:timingdomain_election_delay = 15 + +; Enable NTPd integration +ntpengine:enabled = N + +; Enable control over local NTPd daemon +ntpengine:control_enabled = N + +; NTP control check interval in seconds +; +ntpengine:check_interval = 15 + +; NTP key number - must be configured as a trusted control key in ntp.conf, +; and be non-zero for the ntpengine:control_enabled setting to take effect. +; +ntpengine:key_id = 0 + +; NTP key (plain text, max. 20 characters) - must match the key configured in +; ntpd's keys file, and must be non-zero for the ntpengine:control_enabled +; setting to take effect. +; +ntpengine:key = + +; ========= newline required in the end ========== + diff --git a/CarPC/etc/rc.local b/CarPC/etc/rc.local new file mode 100644 index 0000000..91a1a00 --- /dev/null +++ b/CarPC/etc/rc.local @@ -0,0 +1,33 @@ +#!/bin/sh -e +# +# rc.local +# +# This script is executed at the end of each multiuser runlevel. +# Make sure that the script will "exit 0" on success or any other +# value on error. +# +# In order to enable or disable this script just change the execution +# bits. +# +# By default this script does nothing. + +# CAN +ifconfig can0 down +ip link set can0 type can bitrate 500000 +ifconfig can0 txqueuelen 1000 +ifconfig can0 up + +# Cnomicon+CVehicle +/usr/local/cnomicon/sbin/cnomicon-setup +/usr/local/cvehicle/sbin/cvehicle-setup + +# BSMP standalone (without MABX2) +ping -c 1 -W 1 mabx2 &> /dev/null +if [ "$?" = "1" ] +then + echo "MABX2 not found!" + #cd /home/neal/NTCNA/CVehicle/daemons/bsmpd + #./gen5bsmpd.sh +fi + +exit 0 diff --git a/CarPC/etc/systemd/system/multi-user.target.wants/gpsd.service b/CarPC/etc/systemd/system/multi-user.target.wants/gpsd.service new file mode 100644 index 0000000..95f05a8 --- /dev/null +++ b/CarPC/etc/systemd/system/multi-user.target.wants/gpsd.service @@ -0,0 +1,15 @@ +[Unit] +Description=GPS (Global Positioning System) Daemon +Requires=gpsd.socket +# Needed with chrony SOCK refclock +After=chronyd.service + +[Service] +Type=forking +EnvironmentFile=-/etc/default/gpsd +ExecStart=/usr/sbin/gpsd $GPSD_OPTIONS $DEVICES + +[Install] +WantedBy=multi-user.target +Also=gpsd.socket + diff --git a/CarPC/etc/systemd/system/sockets.target.wants/gpsd.socket b/CarPC/etc/systemd/system/sockets.target.wants/gpsd.socket new file mode 100644 index 0000000..80181e9 --- /dev/null +++ b/CarPC/etc/systemd/system/sockets.target.wants/gpsd.socket @@ -0,0 +1,11 @@ +[Unit] +Description=GPS (Global Positioning System) Daemon Sockets + +[Socket] +ListenStream=/var/run/gpsd.sock +ListenStream=[::1]:2947 +ListenStream=0.0.0.0:2947 +SocketMode=0600 + +[Install] +WantedBy=sockets.target diff --git a/CarPC/etc/x11vnc.pass b/CarPC/etc/x11vnc.pass new file mode 100644 index 0000000..b380aca --- /dev/null +++ b/CarPC/etc/x11vnc.pass @@ -0,0 +1 @@ +J9Ñ9p‹û \ No newline at end of file diff --git a/CarPC/lib/systemd/system/rc-local.service b/CarPC/lib/systemd/system/rc-local.service new file mode 100644 index 0000000..4cd18d0 --- /dev/null +++ b/CarPC/lib/systemd/system/rc-local.service @@ -0,0 +1,21 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +[Unit] +Description=/etc/rc.local Compatibility +ConditionPathExists=/etc/rc.local + +[Service] +Type=forking +ExecStart=/etc/rc.local start +TimeoutSec=0 +StandardOutput=tty +RemainAfterExit=yes +SysVStartPriority=99 + +[Install] +WantedBy=multi-user.target diff --git a/CarPC/x11vnc-setup.sh b/CarPC/x11vnc-setup.sh new file mode 100755 index 0000000..eec9728 --- /dev/null +++ b/CarPC/x11vnc-setup.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +sudo apt-get install x11vnc +sudo x11vnc -storepasswd car-ntcna /etc/x11vnc.pass + +cat > /etc/systemd/system/x11vnc.service << EOF +[Unit] +Description="x11vnc" +Requires=display-manager.service +After=display-manager.service + +[Service] +ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass +ExecStop=/usr/bin/killall x11vnc +Restart=on-failure +Restart-sec=2 + +[Install] +WantedBy=multi-user.target +EOF + +sudo systemctl daemon-reload +sudo systemctl enable x11vnc +sudo systemctl start x11vnc +