summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2023-01-24 21:42:02 +0100
committerHugo Hörnquist <hugo@lysator.liu.se>2023-01-24 21:53:05 +0100
commitb549e42cbfc474f9f42f431f052b7646f90de655 (patch)
tree82a55c6e3299b9a629eed50b90f64a11edf079b6
parentInitial commit. (diff)
downloadlightdm-b549e42cbfc474f9f42f431f052b7646f90de655.tar.gz
lightdm-b549e42cbfc474f9f42f431f052b7646f90de655.tar.xz
Add everything.HEADmaster
-rw-r--r--.puppet-lint.rc1
-rw-r--r--.rubocop.yml519
-rw-r--r--Gemfile63
-rw-r--r--Gemfile.lock511
-rw-r--r--LICENSE202
-rw-r--r--manifests/config.pp103
-rw-r--r--manifests/greeter/gtk.pp15
-rw-r--r--manifests/init.pp50
-rw-r--r--manifests/seat.pp186
-rw-r--r--manifests/vncserver.pp43
-rw-r--r--manifests/xdmcpserver.pp40
-rw-r--r--metadata.json26
-rw-r--r--pdk.yaml2
-rw-r--r--templates/ini.epp13
-rw-r--r--templates/lightdm.conf.epp170
15 files changed, 1944 insertions, 0 deletions
diff --git a/.puppet-lint.rc b/.puppet-lint.rc
new file mode 100644
index 0000000..cc96ece
--- /dev/null
+++ b/.puppet-lint.rc
@@ -0,0 +1 @@
+--relative
diff --git a/.rubocop.yml b/.rubocop.yml
new file mode 100644
index 0000000..31e8248
--- /dev/null
+++ b/.rubocop.yml
@@ -0,0 +1,519 @@
+---
+require:
+- rubocop-performance
+- rubocop-rspec
+AllCops:
+ DisplayCopNames: true
+ TargetRubyVersion: '2.5'
+ Include:
+ - "**/*.rb"
+ Exclude:
+ - bin/*
+ - ".vendor/**/*"
+ - "**/Gemfile"
+ - "**/Rakefile"
+ - pkg/**/*
+ - spec/fixtures/**/*
+ - vendor/**/*
+ - "**/Puppetfile"
+ - "**/Vagrantfile"
+ - "**/Guardfile"
+Layout/LineLength:
+ Description: People have wide screens, use them.
+ Max: 200
+RSpec/BeforeAfterAll:
+ Description: Beware of using after(:all) as it may cause state to leak between tests.
+ A necessary evil in acceptance testing.
+ Exclude:
+ - spec/acceptance/**/*.rb
+RSpec/HookArgument:
+ Description: Prefer explicit :each argument, matching existing module's style
+ EnforcedStyle: each
+RSpec/DescribeSymbol:
+ Exclude:
+ - spec/unit/facter/**/*.rb
+Style/BlockDelimiters:
+ Description: Prefer braces for chaining. Mostly an aesthetical choice. Better to
+ be consistent then.
+ EnforcedStyle: braces_for_chaining
+Style/ClassAndModuleChildren:
+ Description: Compact style reduces the required amount of indentation.
+ EnforcedStyle: compact
+Style/EmptyElse:
+ Description: Enforce against empty else clauses, but allow `nil` for clarity.
+ EnforcedStyle: empty
+Style/FormatString:
+ Description: Following the main puppet project's style, prefer the % format format.
+ EnforcedStyle: percent
+Style/FormatStringToken:
+ Description: Following the main puppet project's style, prefer the simpler template
+ tokens over annotated ones.
+ EnforcedStyle: template
+Style/Lambda:
+ Description: Prefer the keyword for easier discoverability.
+ EnforcedStyle: literal
+Style/RegexpLiteral:
+ Description: Community preference. See https://github.com/voxpupuli/modulesync_config/issues/168
+ EnforcedStyle: percent_r
+Style/TernaryParentheses:
+ Description: Checks for use of parentheses around ternary conditions. Enforce parentheses
+ on complex expressions for better readability, but seriously consider breaking
+ it up.
+ EnforcedStyle: require_parentheses_when_complex
+Style/TrailingCommaInArguments:
+ Description: Prefer always trailing comma on multiline argument lists. This makes
+ diffs, and re-ordering nicer.
+ EnforcedStyleForMultiline: comma
+Style/TrailingCommaInArrayLiteral:
+ Description: Prefer always trailing comma on multiline literals. This makes diffs,
+ and re-ordering nicer.
+ EnforcedStyleForMultiline: comma
+Style/SymbolArray:
+ Description: Using percent style obscures symbolic intent of array's contents.
+ EnforcedStyle: brackets
+RSpec/MessageSpies:
+ EnforcedStyle: receive
+Style/Documentation:
+ Exclude:
+ - lib/puppet/parser/functions/**/*
+ - spec/**/*
+Style/WordArray:
+ EnforcedStyle: brackets
+Performance/AncestorsInclude:
+ Enabled: true
+Performance/BigDecimalWithNumericArgument:
+ Enabled: true
+Performance/BlockGivenWithExplicitBlock:
+ Enabled: true
+Performance/CaseWhenSplat:
+ Enabled: true
+Performance/ConstantRegexp:
+ Enabled: true
+Performance/MethodObjectAsBlock:
+ Enabled: true
+Performance/RedundantSortBlock:
+ Enabled: true
+Performance/RedundantStringChars:
+ Enabled: true
+Performance/ReverseFirst:
+ Enabled: true
+Performance/SortReverse:
+ Enabled: true
+Performance/Squeeze:
+ Enabled: true
+Performance/StringInclude:
+ Enabled: true
+Performance/Sum:
+ Enabled: true
+Style/CollectionMethods:
+ Enabled: true
+Style/MethodCalledOnDoEndBlock:
+ Enabled: true
+Style/StringMethods:
+ Enabled: true
+Bundler/InsecureProtocolSource:
+ Enabled: false
+Gemspec/DuplicatedAssignment:
+ Enabled: false
+Gemspec/OrderedDependencies:
+ Enabled: false
+Gemspec/RequiredRubyVersion:
+ Enabled: false
+Gemspec/RubyVersionGlobalsUsage:
+ Enabled: false
+Layout/ArgumentAlignment:
+ Enabled: false
+Layout/BeginEndAlignment:
+ Enabled: false
+Layout/ClosingHeredocIndentation:
+ Enabled: false
+Layout/EmptyComment:
+ Enabled: false
+Layout/EmptyLineAfterGuardClause:
+ Enabled: false
+Layout/EmptyLinesAroundArguments:
+ Enabled: false
+Layout/EmptyLinesAroundAttributeAccessor:
+ Enabled: false
+Layout/EndOfLine:
+ Enabled: false
+Layout/FirstArgumentIndentation:
+ Enabled: false
+Layout/HashAlignment:
+ Enabled: false
+Layout/HeredocIndentation:
+ Enabled: false
+Layout/LeadingEmptyLines:
+ Enabled: false
+Layout/SpaceAroundMethodCallOperator:
+ Enabled: false
+Layout/SpaceInsideArrayLiteralBrackets:
+ Enabled: false
+Layout/SpaceInsideReferenceBrackets:
+ Enabled: false
+Lint/BigDecimalNew:
+ Enabled: false
+Lint/BooleanSymbol:
+ Enabled: false
+Lint/ConstantDefinitionInBlock:
+ Enabled: false
+Lint/DeprecatedOpenSSLConstant:
+ Enabled: false
+Lint/DisjunctiveAssignmentInConstructor:
+ Enabled: false
+Lint/DuplicateElsifCondition:
+ Enabled: false
+Lint/DuplicateRequire:
+ Enabled: false
+Lint/DuplicateRescueException:
+ Enabled: false
+Lint/EmptyConditionalBody:
+ Enabled: false
+Lint/EmptyFile:
+ Enabled: false
+Lint/ErbNewArguments:
+ Enabled: false
+Lint/FloatComparison:
+ Enabled: false
+Lint/HashCompareByIdentity:
+ Enabled: false
+Lint/IdentityComparison:
+ Enabled: false
+Lint/InterpolationCheck:
+ Enabled: false
+Lint/MissingCopEnableDirective:
+ Enabled: false
+Lint/MixedRegexpCaptureTypes:
+ Enabled: false
+Lint/NestedPercentLiteral:
+ Enabled: false
+Lint/NonDeterministicRequireOrder:
+ Enabled: false
+Lint/OrderedMagicComments:
+ Enabled: false
+Lint/OutOfRangeRegexpRef:
+ Enabled: false
+Lint/RaiseException:
+ Enabled: false
+Lint/RedundantCopEnableDirective:
+ Enabled: false
+Lint/RedundantRequireStatement:
+ Enabled: false
+Lint/RedundantSafeNavigation:
+ Enabled: false
+Lint/RedundantWithIndex:
+ Enabled: false
+Lint/RedundantWithObject:
+ Enabled: false
+Lint/RegexpAsCondition:
+ Enabled: false
+Lint/ReturnInVoidContext:
+ Enabled: false
+Lint/SafeNavigationConsistency:
+ Enabled: false
+Lint/SafeNavigationWithEmpty:
+ Enabled: false
+Lint/SelfAssignment:
+ Enabled: false
+Lint/SendWithMixinArgument:
+ Enabled: false
+Lint/ShadowedArgument:
+ Enabled: false
+Lint/StructNewOverride:
+ Enabled: false
+Lint/ToJSON:
+ Enabled: false
+Lint/TopLevelReturnWithArgument:
+ Enabled: false
+Lint/TrailingCommaInAttributeDeclaration:
+ Enabled: false
+Lint/UnreachableLoop:
+ Enabled: false
+Lint/UriEscapeUnescape:
+ Enabled: false
+Lint/UriRegexp:
+ Enabled: false
+Lint/UselessMethodDefinition:
+ Enabled: false
+Lint/UselessTimes:
+ Enabled: false
+Metrics/AbcSize:
+ Enabled: false
+Metrics/BlockLength:
+ Enabled: false
+Metrics/BlockNesting:
+ Enabled: false
+Metrics/ClassLength:
+ Enabled: false
+Metrics/CyclomaticComplexity:
+ Enabled: false
+Metrics/MethodLength:
+ Enabled: false
+Metrics/ModuleLength:
+ Enabled: false
+Metrics/ParameterLists:
+ Enabled: false
+Metrics/PerceivedComplexity:
+ Enabled: false
+Migration/DepartmentName:
+ Enabled: false
+Naming/AccessorMethodName:
+ Enabled: false
+Naming/BlockParameterName:
+ Enabled: false
+Naming/HeredocDelimiterCase:
+ Enabled: false
+Naming/HeredocDelimiterNaming:
+ Enabled: false
+Naming/MemoizedInstanceVariableName:
+ Enabled: false
+Naming/MethodParameterName:
+ Enabled: false
+Naming/RescuedExceptionsVariableName:
+ Enabled: false
+Naming/VariableNumber:
+ Enabled: false
+Performance/BindCall:
+ Enabled: false
+Performance/DeletePrefix:
+ Enabled: false
+Performance/DeleteSuffix:
+ Enabled: false
+Performance/InefficientHashSearch:
+ Enabled: false
+Performance/UnfreezeString:
+ Enabled: false
+Performance/UriDefaultParser:
+ Enabled: false
+RSpec/Be:
+ Enabled: false
+RSpec/Capybara/CurrentPathExpectation:
+ Enabled: false
+RSpec/Capybara/FeatureMethods:
+ Enabled: false
+RSpec/Capybara/VisibilityMatcher:
+ Enabled: false
+RSpec/ContextMethod:
+ Enabled: false
+RSpec/ContextWording:
+ Enabled: false
+RSpec/DescribeClass:
+ Enabled: false
+RSpec/EmptyHook:
+ Enabled: false
+RSpec/EmptyLineAfterExample:
+ Enabled: false
+RSpec/EmptyLineAfterExampleGroup:
+ Enabled: false
+RSpec/EmptyLineAfterHook:
+ Enabled: false
+RSpec/ExampleLength:
+ Enabled: false
+RSpec/ExampleWithoutDescription:
+ Enabled: false
+RSpec/ExpectChange:
+ Enabled: false
+RSpec/ExpectInHook:
+ Enabled: false
+RSpec/FactoryBot/AttributeDefinedStatically:
+ Enabled: false
+RSpec/FactoryBot/CreateList:
+ Enabled: false
+RSpec/FactoryBot/FactoryClassName:
+ Enabled: false
+RSpec/HooksBeforeExamples:
+ Enabled: false
+RSpec/ImplicitBlockExpectation:
+ Enabled: false
+RSpec/ImplicitSubject:
+ Enabled: false
+RSpec/LeakyConstantDeclaration:
+ Enabled: false
+RSpec/LetBeforeExamples:
+ Enabled: false
+RSpec/MissingExampleGroupArgument:
+ Enabled: false
+RSpec/MultipleExpectations:
+ Enabled: false
+RSpec/MultipleMemoizedHelpers:
+ Enabled: false
+RSpec/MultipleSubjects:
+ Enabled: false
+RSpec/NestedGroups:
+ Enabled: false
+RSpec/PredicateMatcher:
+ Enabled: false
+RSpec/ReceiveCounts:
+ Enabled: false
+RSpec/ReceiveNever:
+ Enabled: false
+RSpec/RepeatedExampleGroupBody:
+ Enabled: false
+RSpec/RepeatedExampleGroupDescription:
+ Enabled: false
+RSpec/RepeatedIncludeExample:
+ Enabled: false
+RSpec/ReturnFromStub:
+ Enabled: false
+RSpec/SharedExamples:
+ Enabled: false
+RSpec/StubbedMock:
+ Enabled: false
+RSpec/UnspecifiedException:
+ Enabled: false
+RSpec/VariableDefinition:
+ Enabled: false
+RSpec/VoidExpect:
+ Enabled: false
+RSpec/Yield:
+ Enabled: false
+Security/Open:
+ Enabled: false
+Style/AccessModifierDeclarations:
+ Enabled: false
+Style/AccessorGrouping:
+ Enabled: false
+Style/AsciiComments:
+ Enabled: false
+Style/BisectedAttrAccessor:
+ Enabled: false
+Style/CaseLikeIf:
+ Enabled: false
+Style/ClassEqualityComparison:
+ Enabled: false
+Style/ColonMethodDefinition:
+ Enabled: false
+Style/CombinableLoops:
+ Enabled: false
+Style/CommentedKeyword:
+ Enabled: false
+Style/Dir:
+ Enabled: false
+Style/DoubleCopDisableDirective:
+ Enabled: false
+Style/EmptyBlockParameter:
+ Enabled: false
+Style/EmptyLambdaParameter:
+ Enabled: false
+Style/Encoding:
+ Enabled: false
+Style/EvalWithLocation:
+ Enabled: false
+Style/ExpandPathArguments:
+ Enabled: false
+Style/ExplicitBlockArgument:
+ Enabled: false
+Style/ExponentialNotation:
+ Enabled: false
+Style/FloatDivision:
+ Enabled: false
+Style/FrozenStringLiteralComment:
+ Enabled: false
+Style/GlobalStdStream:
+ Enabled: false
+Style/HashAsLastArrayItem:
+ Enabled: false
+Style/HashLikeCase:
+ Enabled: false
+Style/HashTransformKeys:
+ Enabled: false
+Style/HashTransformValues:
+ Enabled: false
+Style/IfUnlessModifier:
+ Enabled: false
+Style/KeywordParametersOrder:
+ Enabled: false
+Style/MinMax:
+ Enabled: false
+Style/MixinUsage:
+ Enabled: false
+Style/MultilineWhenThen:
+ Enabled: false
+Style/NegatedUnless:
+ Enabled: false
+Style/NumericPredicate:
+ Enabled: false
+Style/OptionalBooleanParameter:
+ Enabled: false
+Style/OrAssignment:
+ Enabled: false
+Style/RandomWithOffset:
+ Enabled: false
+Style/RedundantAssignment:
+ Enabled: false
+Style/RedundantCondition:
+ Enabled: false
+Style/RedundantConditional:
+ Enabled: false
+Style/RedundantFetchBlock:
+ Enabled: false
+Style/RedundantFileExtensionInRequire:
+ Enabled: false
+Style/RedundantRegexpCharacterClass:
+ Enabled: false
+Style/RedundantRegexpEscape:
+ Enabled: false
+Style/RedundantSelfAssignment:
+ Enabled: false
+Style/RedundantSort:
+ Enabled: false
+Style/RescueStandardError:
+ Enabled: false
+Style/SingleArgumentDig:
+ Enabled: false
+Style/SlicingWithRange:
+ Enabled: false
+Style/SoleNestedConditional:
+ Enabled: false
+Style/StderrPuts:
+ Enabled: false
+Style/StringConcatenation:
+ Enabled: false
+Style/Strip:
+ Enabled: false
+Style/SymbolProc:
+ Enabled: false
+Style/TrailingBodyOnClass:
+ Enabled: false
+Style/TrailingBodyOnMethodDefinition:
+ Enabled: false
+Style/TrailingBodyOnModule:
+ Enabled: false
+Style/TrailingCommaInHashLiteral:
+ Enabled: false
+Style/TrailingMethodEndStatement:
+ Enabled: false
+Style/UnpackFirst:
+ Enabled: false
+Lint/DuplicateBranch:
+ Enabled: false
+Lint/DuplicateRegexpCharacterClassElement:
+ Enabled: false
+Lint/EmptyBlock:
+ Enabled: false
+Lint/EmptyClass:
+ Enabled: false
+Lint/NoReturnInBeginEndBlocks:
+ Enabled: false
+Lint/ToEnumArguments:
+ Enabled: false
+Lint/UnexpectedBlockArity:
+ Enabled: false
+Lint/UnmodifiedReduceAccumulator:
+ Enabled: false
+Performance/CollectionLiteralInLoop:
+ Enabled: false
+Style/ArgumentsForwarding:
+ Enabled: false
+Style/CollectionCompact:
+ Enabled: false
+Style/DocumentDynamicEvalDefinition:
+ Enabled: false
+Style/NegatedIfElseCondition:
+ Enabled: false
+Style/NilLambda:
+ Enabled: false
+Style/RedundantArgument:
+ Enabled: false
+Style/SwapValues:
+ Enabled: false
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..fc28658
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,63 @@
+source ENV['GEM_SOURCE'] || 'https://rubygems.org'
+
+def location_for(place_or_version, fake_version = nil)
+ git_url_regex = %r{\A(?<url>(https?|git)[:@][^#]*)(#(?<branch>.*))?}
+ file_url_regex = %r{\Afile:\/\/(?<path>.*)}
+
+ if place_or_version && (git_url = place_or_version.match(git_url_regex))
+ [fake_version, { git: git_url[:url], branch: git_url[:branch], require: false }].compact
+ elsif place_or_version && (file_url = place_or_version.match(file_url_regex))
+ ['>= 0', { path: File.expand_path(file_url[:path]), require: false }]
+ else
+ [place_or_version, { require: false }]
+ end
+end
+
+ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
+minor_version = ruby_version_segments[0..1].join('.')
+
+group :development do
+ gem "json", '= 2.0.4', require: false if Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+ gem "json", '= 2.1.0', require: false if Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+ gem "json", '= 2.3.0', require: false if Gem::Requirement.create(['>= 2.7.0', '< 2.8.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))
+ gem "puppet-module-posix-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
+ gem "puppet-module-posix-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
+ gem "puppet-module-win-default-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
+ gem "puppet-module-win-dev-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
+ gem "voxpupuli-puppet-lint-plugins", '>= 3.0', require: false
+end
+group :system_tests do
+ gem "puppet-module-posix-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:ruby]
+ gem "puppet-module-win-system-r#{minor_version}", '~> 1.0', require: false, platforms: [:mswin, :mingw, :x64_mingw]
+end
+
+puppet_version = ENV['PUPPET_GEM_VERSION']
+facter_version = ENV['FACTER_GEM_VERSION']
+hiera_version = ENV['HIERA_GEM_VERSION']
+
+gems = {}
+
+gems['puppet'] = location_for(puppet_version)
+
+# If facter or hiera versions have been specified via the environment
+# variables
+
+gems['facter'] = location_for(facter_version) if facter_version
+gems['hiera'] = location_for(hiera_version) if hiera_version
+
+gems.each do |gem_name, gem_params|
+ gem gem_name, *gem_params
+end
+
+# Evaluate Gemfile.local and ~/.gemfile if they exist
+extra_gemfiles = [
+ "#{__FILE__}.local",
+ File.join(Dir.home, '.gemfile'),
+]
+
+extra_gemfiles.each do |gemfile|
+ if File.file?(gemfile) && File.readable?(gemfile)
+ eval(File.read(gemfile), binding)
+ end
+end
+# vim: syntax=ruby
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..e9e1ffd
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,511 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (2.3.6)
+ addressable (2.8.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ ansi (1.5.0)
+ ast (2.4.2)
+ awesome_print (1.9.2)
+ aws-eventstream (1.2.0)
+ aws-partitions (1.591.0)
+ aws-sdk-core (3.131.1)
+ aws-eventstream (~> 1, >= 1.0.2)
+ aws-partitions (~> 1, >= 1.525.0)
+ aws-sigv4 (~> 1.1)
+ jmespath (~> 1, >= 1.6.1)
+ aws-sdk-ec2 (1.316.0)
+ aws-sdk-core (~> 3, >= 3.127.0)
+ aws-sigv4 (~> 1.1)
+ aws-sigv4 (1.5.0)
+ aws-eventstream (~> 1, >= 1.0.2)
+ bcrypt_pbkdf (1.1.0)
+ bindata (2.4.10)
+ bolt (3.22.1)
+ CFPropertyList (~> 2.2)
+ addressable (~> 2.5)
+ aws-sdk-ec2 (~> 1)
+ concurrent-ruby (~> 1.0)
+ ffi (>= 1.9.25, < 2.0.0)
+ hiera-eyaml (~> 3)
+ jwt (~> 2.2)
+ logging (~> 2.2)
+ minitar (~> 0.6)
+ net-scp (~> 1.2)
+ net-ssh (>= 4.0)
+ net-ssh-krb (~> 0.5)
+ orchestrator_client (~> 0.5)
+ puppet (>= 6.18.0)
+ puppet-resource_api (>= 1.8.1)
+ puppet-strings (~> 2.3)
+ puppetfile-resolver (~> 0.5)
+ r10k (~> 3.10)
+ ruby_smb (~> 1.0)
+ terminal-table (~> 3.0)
+ winrm (~> 2.0)
+ winrm-fs (~> 1.3)
+ builder (3.2.4)
+ codecov (0.6.0)
+ simplecov (>= 0.15, < 0.22)
+ coderay (1.1.3)
+ colored2 (3.1.2)
+ concurrent-ruby (1.1.10)
+ connection_pool (2.2.5)
+ cri (2.15.11)
+ deep_merge (1.2.2)
+ dependency_checker (0.3.0)
+ parallel
+ puppet_forge (>= 2.2, < 4.0)
+ rake (~> 13.0)
+ semantic_puppet (~> 1.0)
+ diff-lcs (1.5.0)
+ docile (1.4.0)
+ docker-api (2.2.0)
+ excon (>= 0.47.0)
+ multi_json
+ domain_name (0.5.20190701)
+ unf (>= 0.0.5, < 1.0.0)
+ ed25519 (1.3.0)
+ erubi (1.10.0)
+ excon (0.92.3)
+ facter (4.2.9)
+ hocon (~> 1.3)
+ thor (>= 1.0.1, < 2.0)
+ facterdb (1.16.1)
+ facter (< 5.0.0)
+ jgrep
+ faraday (1.10.0)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.0.3)
+ multipart-post (>= 1.2, < 3)
+ faraday-net_http (1.0.1)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.0)
+ faraday (~> 1.0)
+ fast_gettext (1.1.2)
+ ffi (1.15.5)
+ ffi-compiler (1.0.1)
+ ffi (>= 1.0.0)
+ rake
+ forwardable (1.3.2)
+ gettext (3.4.3)
+ erubi
+ locale (>= 2.0.5)
+ prime
+ text (>= 1.3.0)
+ gettext-setup (0.31)
+ fast_gettext (~> 1.1.0)
+ gettext (>= 3.0.2)
+ locale
+ gssapi (1.3.1)
+ ffi (>= 1.0.1)
+ gyoku (1.4.0)
+ builder (>= 2.1.2)
+ rexml (~> 3.0)
+ hiera (3.9.0)
+ hiera-eyaml (3.3.0)
+ highline
+ optimist
+ highline (2.0.3)
+ hirb (0.7.3)
+ hocon (1.3.1)
+ honeycomb-beeline (2.10.0)
+ libhoney (>= 1.14.2)
+ http (5.0.4)
+ addressable (~> 2.8)
+ http-cookie (~> 1.0)
+ http-form_data (~> 2.2)
+ llhttp-ffi (~> 0.4.0)
+ http-accept (1.7.0)
+ http-cookie (1.0.4)
+ domain_name (~> 0.5)
+ http-form_data (2.3.0)
+ httpclient (2.8.3)
+ jgrep (1.5.4)
+ jmespath (1.6.1)
+ json (2.3.0)
+ json-schema (3.0.0)
+ addressable (>= 2.8)
+ jwt (2.2.3)
+ libhoney (2.2.0)
+ addressable (~> 2.0)
+ excon
+ http (>= 2.0, < 6.0)
+ little-plugger (1.1.4)
+ llhttp-ffi (0.4.0)
+ ffi-compiler (~> 1.0)
+ rake (~> 13.0)
+ locale (2.1.3)
+ log4r (1.1.10)
+ logging (2.3.1)
+ little-plugger (~> 1.1)
+ multi_json (~> 1.14)
+ metaclass (0.0.4)
+ metadata-json-lint (3.0.2)
+ json-schema (>= 2.8, < 4.0)
+ spdx-licenses (~> 1.0)
+ method_source (1.0.0)
+ mime-types (3.4.1)
+ mime-types-data (~> 3.2015)
+ mime-types-data (3.2022.0105)
+ minitar (0.9)
+ mocha (1.1.0)
+ metaclass (~> 0.0.1)
+ molinillo (0.8.0)
+ multi_json (1.15.0)
+ multipart-post (2.1.1)
+ net-http-persistent (4.0.1)
+ connection_pool (~> 2.2)
+ net-scp (1.2.1)
+ net-ssh (>= 2.6.5)
+ net-ssh (6.1.0)
+ net-ssh-krb (0.5.1)
+ gssapi (~> 1.3.0)
+ net-ssh (>= 2.0)
+ net-telnet (0.1.1)
+ netrc (0.11.0)
+ nori (2.6.0)
+ optimist (3.0.1)
+ orchestrator_client (0.5.3)
+ faraday
+ net-http-persistent
+ parallel (1.22.1)
+ parallel_tests (3.10.1)
+ parallel
+ parser (3.1.2.0)
+ ast (~> 2.4.1)
+ pathspec (1.0.0)
+ pluginator (1.5.0)
+ prime (0.1.2)
+ forwardable
+ singleton
+ pry (0.14.1)
+ coderay (~> 1.1)
+ method_source (~> 1.0)
+ public_suffix (4.0.7)
+ puppet (7.16.0)
+ concurrent-ruby (~> 1.0)
+ deep_merge (~> 1.0)
+ facter (> 2.0.1, < 5)
+ fast_gettext (>= 1.1, < 3)
+ hiera (>= 3.2.1, < 4)
+ locale (~> 2.1)
+ multi_json (~> 1.10)
+ puppet-resource_api (~> 1.5)
+ scanf (~> 1.0)
+ semantic_puppet (~> 1.0)
+ puppet-blacksmith (6.1.1)
+ puppet-modulebuilder (~> 0.2)
+ rest-client (~> 2.0)
+ puppet-debugger (1.2.0)
+ awesome_print (~> 1.7)
+ bundler
+ facterdb (>= 0.4.0)
+ pluginator (~> 1.5.0)
+ puppet (>= 5.5)
+ rb-readline (>= 0.5.5)
+ table_print (>= 1.0.0)
+ tty-pager (~> 0.13.0)
+ puppet-lint (2.5.2)
+ puppet-lint-absolute_classname-check (3.0.1)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-anchor-check (1.0.1)
+ puppet-lint (>= 1.1, < 3.0)
+ puppet-lint-classes_and_types_beginning_with_digits-check (1.0.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-file_ensure-check (1.0.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-leading_zero-check (1.0.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-legacy_facts-check (1.0.4)
+ puppet-lint (~> 2.4)
+ puppet-lint-lookup_in_parameter-check (1.0.0)
+ puppet-lint (~> 2.0)
+ puppet-lint-manifest_whitespace-check (0.1.17)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-optional_default-check (1.0.0)
+ puppet-lint (>= 2.1, < 3.0)
+ puppet-lint-param-docs (1.7.5)
+ puppet-lint (>= 1.1, < 3.0)
+ puppet-lint-param-types (0.0.1)
+ puppet-lint (>= 1.1, < 3.0)
+ puppet-lint-params_empty_string-check (1.0.0)
+ puppet-lint (~> 2.5)
+ puppet-lint-resource_reference_syntax (1.1.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-strict_indent-check (2.0.8)
+ puppet-lint (> 1.0)
+ puppet-lint-top_scope_facts-check (1.0.1)
+ puppet-lint (~> 2.0)
+ puppet-lint-topscope-variable-check (1.0.1)
+ puppet-lint (~> 2.0)
+ puppet-lint-trailing_comma-check (0.4.2)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-unquoted_string-check (2.1.0)
+ puppet-lint (>= 2.1, < 3.0)
+ puppet-lint-variable_contains_upcase (1.2.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-lint-version_comparison-check (1.0.0)
+ puppet-lint (>= 1.0, < 3.0)
+ puppet-module-posix-default-r2.7 (1.1.1)
+ puppet-module-posix-dev-r2.7 (1.1.1)
+ bcrypt_pbkdf (~> 1.0)
+ codecov (~> 0.2)
+ concurrent-ruby (!= 1.1.6)
+ dependency_checker (~> 0.2)
+ ed25519 (~> 1.2)
+ facterdb (>= 0.8.1, < 2.0.0)
+ metadata-json-lint (>= 2.0.2, < 4.0.0)
+ mocha (>= 1.0.0, < 1.2.0)
+ parallel_tests (~> 3.4)
+ pry (~> 0.10)
+ puppet-blacksmith (~> 6.0)
+ puppet-debugger (~> 1.0)
+ puppet-lint (>= 2.3.0, < 3.0.0)
+ puppet-resource_api (~> 1.8)
+ puppet-strings (~> 2.0)
+ puppet-syntax (~> 3.0)
+ puppetlabs_spec_helper (>= 2.9.0, < 4.0.0)
+ rainbow (~> 2.0)
+ rspec-puppet (>= 2.3.2, < 3.0.0)
+ rspec-puppet-facts (>= 1.10.0, < 3)
+ rspec_junit_formatter (~> 0.2)
+ rubocop (= 1.6.1)
+ rubocop-performance (= 1.9.1)
+ rubocop-rspec (= 2.0.1)
+ serverspec (~> 2.41)
+ simplecov (< 0.19.0)
+ simplecov-console (~> 0.4.2)
+ specinfra (= 2.82.2)
+ puppet-module-posix-system-r2.7 (1.1.1)
+ puppet_litmus (~> 0.20)
+ puppet-modulebuilder (0.3.0)
+ minitar (~> 0.9)
+ pathspec (>= 0.2.1, < 2.0.0)
+ puppet-resource_api (1.8.14)
+ hocon (>= 1.0)
+ puppet-strings (2.9.0)
+ rgen
+ yard (~> 0.9.5)
+ puppet-syntax (3.2.1)
+ puppet (>= 5)
+ rake
+ puppet_forge (3.2.0)
+ faraday (~> 1.3)
+ faraday_middleware (~> 1.0)
+ minitar
+ semantic_puppet (~> 1.0)
+ puppet_litmus (0.33.2)
+ bolt (>= 2.0.1, < 4.0.0)
+ docker-api (>= 1.34, < 3.0.0)
+ honeycomb-beeline
+ parallel
+ puppet-modulebuilder (>= 0.2.1, < 1.0.0)
+ retryable (~> 3.0)
+ rspec
+ rspec_honeycomb_formatter
+ tty-spinner (>= 0.5.0, < 1.0.0)
+ puppetfile-resolver (0.5.0)
+ molinillo (~> 0.6)
+ semantic_puppet (~> 1.0)
+ puppetlabs_spec_helper (3.0.0)
+ mocha (~> 1.0)
+ pathspec (>= 0.2.1, < 1.1.0)
+ puppet-lint (~> 2.0)
+ puppet-syntax (>= 2.0, < 4)
+ rspec-puppet (~> 2.0)
+ r10k (3.15.0)
+ colored2 (= 3.1.2)
+ cri (>= 2.15.10)
+ fast_gettext (>= 1.1.0, < 3.0.0)
+ gettext (>= 3.0.2, < 4.0.0)
+ gettext-setup (~> 0.24)
+ jwt (~> 2.2.3)
+ log4r (= 1.1.10)
+ minitar (~> 0.9)
+ multi_json (~> 1.10)
+ puppet_forge (>= 2.3.0)
+ rainbow (2.2.2)
+ rake
+ rake (13.0.6)
+ rb-readline (0.5.5)
+ regexp_parser (2.4.0)
+ rest-client (2.1.0)
+ http-accept (>= 1.7.0, < 2.0)
+ http-cookie (>= 1.0.2, < 2.0)
+ mime-types (>= 1.16, < 4.0)
+ netrc (~> 0.8)
+ retryable (3.0.5)
+ rexml (3.2.5)
+ rgen (0.9.0)
+ rspec (3.11.0)
+ rspec-core (~> 3.11.0)
+ rspec-expectations (~> 3.11.0)
+ rspec-mocks (~> 3.11.0)
+ rspec-core (3.11.0)
+ rspec-support (~> 3.11.0)
+ rspec-expectations (3.11.0)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.11.0)
+ rspec-its (1.3.0)
+ rspec-core (>= 3.0.0)
+ rspec-expectations (>= 3.0.0)
+ rspec-mocks (3.11.1)
+ diff-lcs (>= 1.2.0, < 2.0)
+ rspec-support (~> 3.11.0)
+ rspec-puppet (2.11.1)
+ rspec
+ rspec-puppet-facts (2.0.5)
+ facter
+ facterdb (>= 0.5.0)
+ puppet
+ rspec-support (3.11.0)
+ rspec_honeycomb_formatter (0.2.1)
+ honeycomb-beeline
+ rspec-core (~> 3.0)
+ rspec_junit_formatter (0.5.1)
+ rspec-core (>= 2, < 4, != 2.12.0)
+ rubocop (1.6.1)
+ parallel (~> 1.10)
+ parser (>= 2.7.1.5)
+ rainbow (>= 2.2.2, < 4.0)
+ regexp_parser (>= 1.8, < 3.0)
+ rexml
+ rubocop-ast (>= 1.2.0, < 2.0)
+ ruby-progressbar (~> 1.7)
+ unicode-display_width (>= 1.4.0, < 2.0)
+ rubocop-ast (1.18.0)
+ parser (>= 3.1.1.0)
+ rubocop-performance (1.9.1)
+ rubocop (>= 0.90.0, < 2.0)
+ rubocop-ast (>= 0.4.0)
+ rubocop-rspec (2.0.1)
+ rubocop (~> 1.0)
+ rubocop-ast (>= 1.1.0)
+ ruby-progressbar (1.11.0)
+ ruby2_keywords (0.0.5)
+ ruby_smb (1.1.0)
+ bindata
+ rubyntlm
+ windows_error
+ rubyntlm (0.6.3)
+ rubyzip (2.3.2)
+ scanf (1.0.0)
+ semantic_puppet (1.0.4)
+ serverspec (2.42.0)
+ multi_json
+ rspec (~> 3.0)
+ rspec-its
+ specinfra (~> 2.72)
+ sfl (2.3)
+ simplecov (0.18.5)
+ docile (~> 1.1)
+ simplecov-html (~> 0.11)
+ simplecov-console (0.4.2)
+ ansi
+ hirb
+ simplecov
+ simplecov-html (0.12.3)
+ singleton (0.1.1)
+ spdx-licenses (1.3.0)
+ specinfra (2.82.2)
+ net-scp
+ net-ssh (>= 2.7)
+ net-telnet (= 0.1.1)
+ sfl
+ strings (0.1.8)
+ strings-ansi (~> 0.1)
+ unicode-display_width (~> 1.5)
+ unicode_utils (~> 1.4)
+ strings-ansi (0.2.0)
+ table_print (1.5.7)
+ terminal-table (3.0.2)
+ unicode-display_width (>= 1.1.1, < 3)
+ text (1.3.1)
+ thor (1.2.1)
+ tty-cursor (0.7.1)
+ tty-pager (0.13.0)
+ strings (~> 0.1.8)
+ tty-screen (~> 0.8)
+ tty-screen (0.8.1)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.8.1)
+ unicode-display_width (1.8.0)
+ unicode_utils (1.4.0)
+ voxpupuli-puppet-lint-plugins (3.0.0)
+ puppet-lint (>= 2.5.0)
+ puppet-lint-absolute_classname-check (>= 2.0.0)
+ puppet-lint-anchor-check
+ puppet-lint-classes_and_types_beginning_with_digits-check
+ puppet-lint-file_ensure-check
+ puppet-lint-leading_zero-check
+ puppet-lint-legacy_facts-check
+ puppet-lint-lookup_in_parameter-check
+ puppet-lint-manifest_whitespace-check
+ puppet-lint-optional_default-check
+ puppet-lint-param-docs
+ puppet-lint-param-types
+ puppet-lint-params_empty_string-check
+ puppet-lint-resource_reference_syntax
+ puppet-lint-strict_indent-check
+ puppet-lint-top_scope_facts-check
+ puppet-lint-topscope-variable-check
+ puppet-lint-trailing_comma-check
+ puppet-lint-unquoted_string-check
+ puppet-lint-variable_contains_upcase
+ puppet-lint-version_comparison-check
+ webrick (1.7.0)
+ windows_error (0.1.4)
+ winrm (2.3.6)
+ builder (>= 2.1.2)
+ erubi (~> 1.8)
+ gssapi (~> 1.2)
+ gyoku (~> 1.0)
+ httpclient (~> 2.2, >= 2.2.0.2)
+ logging (>= 1.6.1, < 3.0)
+ nori (~> 2.0)
+ rubyntlm (~> 0.6.0, >= 0.6.3)
+ winrm-fs (1.3.5)
+ erubi (~> 1.8)
+ logging (>= 1.6.1, < 3.0)
+ rubyzip (~> 2.0)
+ winrm (~> 2.0)
+ yard (0.9.27)
+ webrick (~> 1.7.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ json (= 2.3.0)
+ puppet (= 7.16.0)
+ puppet-module-posix-default-r2.7 (~> 1.0)
+ puppet-module-posix-dev-r2.7 (~> 1.0)
+ puppet-module-posix-system-r2.7 (~> 1.0)
+ puppet-module-win-default-r2.7 (~> 1.0)
+ puppet-module-win-dev-r2.7 (~> 1.0)
+ puppet-module-win-system-r2.7 (~> 1.0)
+ voxpupuli-puppet-lint-plugins (>= 3.0)
+
+BUNDLED WITH
+ 2.1.4
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5952332
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2023 Hugo Hörnquist
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/manifests/config.pp b/manifests/config.pp
new file mode 100644
index 0000000..5251a81
--- /dev/null
+++ b/manifests/config.pp
@@ -0,0 +1,103 @@
+# @param filename
+# File containing the lightdm config
+# @param seat_fragment_min
+# Minimum value for range of seat configuration.
+# This defines the interval in which seats can be allocated. You
+# might need to increase the interval if you have MANY seats.
+# The XDMCP and VLC server are configured to always be placed just
+# after all seats.
+# @param seat_fragment_max
+# Maximum value for range of seat configuration. See
+# seat_fragment_min
+# --------------------------------------------------
+# @param start_default_seat
+# True to always start one seat if none are defined in the configuration
+# @param greeter_user
+# User to run greeter as
+# @param minimum_display_number
+# Minimum display number to use for X servers
+# @param minimum_vt
+# First VT to run displays on
+# @param lock_memory
+# True to prevent memory from being paged to disk
+# @param user_authority_in_system_dir
+# True if session authority should be in the system location
+# @param guest_account_script
+# Script to be run to setup guest account
+# @param logind_check_graphical
+# True to on start seats that are marked as graphical by logind
+# @param log_directory
+# Directory to log information to
+# @param run_directory
+# Directory to put running state in
+# @param cache_directory
+# Directory to cache to
+# @param sessions_directory
+# Directory to find sessions
+# @param remote_sessions_directory
+# Directory to find remote sessions
+# @param greeters_directory
+# Directory to find greeters
+# @param backup_logs
+# True to move add a .old suffix to old log files when opening new ones
+# @param dbus_service
+# True if LightDM provides a D-Bus service to control it
+class lightdm::config (
+ Optional[Boolean] $start_default_seat = undef,
+ Optional[String] $greeter_user = undef,
+ Optional[Integer] $minimum_display_number = undef,
+ Optional[Integer] $minimum_vt = undef,
+ Optional[Boolean] $lock_memory = undef,
+ Optional[Boolean] $user_authority_in_system_dir = undef,
+ Optional[String] $guest_account_script = undef,
+ Optional[Boolean] $logind_check_graphical = undef,
+ Optional[Stdlib::Absolutepath] $log_directory = undef,
+ Optional[Stdlib::Absolutepath] $run_directory = undef,
+ Optional[Stdlib::Absolutepath] $cache_directory = undef,
+ Optional[Variant[Stdlib::Absolutepath, Array[Stdlib::Absolutepath]]] $sessions_directory = undef,
+ Optional[Stdlib::Absolutepath] $remote_sessions_directory = undef,
+ Optional[Variant[String, Array[String]]] $greeters_directory = undef,
+ Optional[Boolean] $backup_logs = undef,
+ Optional[Boolean] $dbus_service = undef,
+
+ Integer[2] $seat_fragment_min = 20,
+ Integer $seat_fragment_max = 40,
+ String $filename = '/etc/lightdm/lightdm.conf',
+) {
+ concat { $filename:
+ order => 'numeric',
+ }
+
+ $lightdm_conf = {
+ 'start-default-seat' => $start_default_seat,
+ 'greeter-user' => $greeter_user,
+ 'minimum-display-number' => $minimum_display_number,
+ 'minimum-vt' => $minimum_vt,
+ 'lock-memory' => $lock_memory,
+ 'user-authority-in-system-dir' => $user_authority_in_system_dir,
+ 'guest-account-script' => $guest_account_script,
+ 'logind-check-graphical' => $logind_check_graphical,
+ 'log-directory' => $log_directory,
+ 'run-directory' => $run_directory,
+ 'cache-directory' => $cache_directory,
+ 'sessions-directory' => $sessions_directory,
+ 'remote-sessions-directory' => $remote_sessions_directory,
+ 'greeters-directory' => $greeters_directory,
+ 'backup-logs' => $backup_logs,
+ 'dbus-service' => $dbus_service,
+ }
+
+ concat::fragment { 'lightdm - config - header':
+ target => $filename,
+ content => "# File managed by Puppet\n",
+ order => 0,
+ }
+
+ concat::fragment { 'lightdm - config - main':
+ target => $filename,
+ order => 1,
+ content => epp("${module_name}/ini.epp", {
+ sections => { 'LightDM' => $lightdm_conf },
+ }),
+ }
+}
diff --git a/manifests/greeter/gtk.pp b/manifests/greeter/gtk.pp
new file mode 100644
index 0000000..edb9626
--- /dev/null
+++ b/manifests/greeter/gtk.pp
@@ -0,0 +1,15 @@
+# @summary Adds the GTK greeter to the set of available greeters.
+#
+# Adds LightDM's GTK greeter to the set of available greeters, and
+# configures it.
+#
+# @param package_name
+# Package providing the gtk greeter
+class lightdm::greeter::gtk (
+ String $package_name = 'lightdm-gtk-greeter',
+) {
+ ensure_packages([$package_name])
+
+ # file { '/etc/lightdm/lightdm-gtk-greeter.conf':
+ # }
+}
diff --git a/manifests/init.pp b/manifests/init.pp
new file mode 100644
index 0000000..b370940
--- /dev/null
+++ b/manifests/init.pp
@@ -0,0 +1,50 @@
+# @summary Configures LightDM
+# @param package_name
+# Package containing lightdm
+# @param service_name
+# Name of service to enable
+# @param use_account_service
+# Should account service be used in place of users.conf
+# TODO This is currently not implemented.
+class lightdm (
+ String $package_name = 'lightdm',
+ String $service_name = 'lightdm',
+ Boolean $use_account_service = false,
+) {
+ ensure_packages([$package_name])
+
+ service { $service_name:
+ enable => true,
+ }
+
+ file { '/etc/lightdm/lightdm.conf':
+ }
+
+ if $use_account_service {
+ } else {
+ $users = {
+ 'UserList' => {
+ 'minimum-uid' => 1000, # Minimum UID required to be show in greeter
+ # NOTE These lists should be space delimited inline
+ # TODO remove above comment:w
+ 'hidden-users' => ['nobody', 'nobody4', 'noaccess'], # Users that are shown to the user
+ 'hidden-shells' => ['/bin/false', '/usr/bin/nologin', '/bin/nologin', '/sbin/nologin'],
+ },
+ }
+ file { '/etc/lightdm/users.conf':
+ }
+ }
+
+ $keys = {
+ 'keyring' => {
+ 'a' => '0x0123456789ABCD',
+ 'b' => 'secret',
+ },
+ }
+ file { '/etc/lightdm/keys.conf':
+ }
+
+ # file { '/etc/lightdm/Xsession':
+ # mode => '+x',
+ # }
+}
diff --git a/manifests/seat.pp b/manifests/seat.pp
new file mode 100644
index 0000000..905503e
--- /dev/null
+++ b/manifests/seat.pp
@@ -0,0 +1,186 @@
+# @summary Seat configuration
+#
+# @param seat_name
+# Seat configuration is matched against the seat name glob in the
+# section, for example:
+# - `[Seat:*]` matches all seats and is applied first.
+# - `[Seat:seat0]` matches the seat named "seat0".
+# - `[Seat:seat-thin-client*]` matches all seats that have names
+# that start with "seat-thin-client".
+# @param order
+# Order in resulting configuration file this should appear.
+# Probably doesn't matter.
+# --------------------------------------------------
+# @param type
+# Seat type (local, xremote)
+# @param pam_service
+# PAM service to use for login
+# @param pam_autologin_service
+# PAM service to use for autologin
+# @param pam_greeter_service
+# PAM service to use for greeters
+# @param xserver_command
+# X server command to run (can also contain arguments e.g. X -special-option)
+# @param xmir_command
+# Xmir server command to run (can also contain arguments e.g. Xmir -special-option)
+# @param xserver_config
+# Config file to pass to X server
+# @param xserver_layout
+# Layout to pass to X server
+# @param xserver_allow_tcp
+# True if TCP/IP connections are allowed to this X server
+# @param xserver_share
+# True if the X server is shared for both greeter and session
+# @param xserver_hostname
+# Hostname of X server (only for type=xremote)
+# @param xserver_display_number
+# Display number of X server (only for type=xremote)
+# @param xdmcp_manager
+# XDMCP manager to connect to (implies xserver_allow_tcp=true)
+# @param xdmcp_port
+# XDMCP UDP/IP port to communicate on
+# @param xdmcp_key
+# Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# @param greeter_session
+# Session to load for greeter
+# @param greeter_hide_users
+# True to hide the user list
+# @param greeter_allow_guest
+# True if the greeter should show a guest login option
+# @param greeter_show_manual_login
+# True if the greeter should offer a manual login option
+# @param greeter_show_remote_login
+# True if the greeter should offer a remote login option
+# @param user_session
+# Session to load for users
+# @param allow_user_switching
+# True if allowed to switch users
+# @param allow_guest
+# True if guest login is allowed
+# @param guest_session
+# Session to load for guests (overrides user_session)
+# @param session_wrapper
+# Wrapper script to run session with
+# @param greeter_wrapper
+# Wrapper script to run greeter with
+# @param guest_wrapper
+# Wrapper script to run guest sessions with
+# @param display_setup_script
+# Script to run when starting a greeter session (runs as root)
+# @param display_stopped_script
+# Script to run after stopping the display server (runs as root)
+# @param greeter_setup_script
+# Script to run when starting a greeter (runs as root)
+# @param session_setup_script
+# Script to run when starting a user session (runs as root)
+# @param session_cleanup_script
+# Script to run when quitting a user session (runs as root)
+# @param autologin_guest
+# True to log in as guest by default
+# @param autologin_user
+# User to log in with by default (overrides autologin_guest)
+# @param autologin_user_timeout
+# Number of seconds to wait before loading default user
+# @param autologin_session
+# Session to load for automatic login (overrides user_session)
+# @param autologin_in_background
+# True if autologin session should not be immediately activated
+# @param exit_on_failure
+# True if the daemon should exit if this seat fails
+define lightdm::seat (
+ Enum['local', 'xremote'] $type = 'local',
+ Optional[String] $pam_service = undef,
+ Optional[String] $pam_autologin_service = undef,
+ Optional[String] $pam_greeter_service = undef,
+ Optional[String] $xserver_command = undef,
+ Optional[String] $xmir_command = undef,
+ Optional[String] $xserver_config = undef,
+ Optional[String] $xserver_layout = undef,
+ Optional[Boolean] $xserver_allow_tcp = undef,
+ Optional[Boolean] $xserver_share = undef,
+ Optional[String] $xserver_hostname = undef,
+ Optional[Integer] $xserver_display_number = undef,
+ Optional[String] $xdmcp_manager = undef,
+ Optional[Stdlib::Port] $xdmcp_port = undef,
+ # TODO sensitive on this?
+ Optional[String] $xdmcp_key = undef,
+ Optional[String] $greeter_session = undef,
+ Optional[Boolean] $greeter_hide_users = undef,
+ Optional[Boolean] $greeter_allow_guest = undef,
+ Optional[Boolean] $greeter_show_manual_login = undef,
+ Optional[Boolean] $greeter_show_remote_login = undef,
+ Optional[String] $user_session = undef,
+ Optional[Boolean] $allow_user_switching = undef,
+ Optional[Boolean] $allow_guest = undef,
+ Optional[String] $guest_session = undef,
+ String $session_wrapper = '/etc/lightdm/Xsession',
+ Optional[String] $greeter_wrapper = undef,
+ Optional[String] $guest_wrapper = undef,
+ Optional[String] $display_setup_script = undef,
+ Optional[String] $display_stopped_script = undef,
+ Optional[String] $greeter_setup_script = undef,
+ Optional[String] $session_setup_script = undef,
+ Optional[String] $session_cleanup_script = undef,
+ Optional[Boolean] $autologin_guest = undef,
+ Optional[String] $autologin_user = undef,
+ Optional[Integer] $autologin_user_timeout = undef,
+ Optional[String] $autologin_session = undef,
+ Optional[Boolean] $autologin_in_background = undef,
+ Optional[Boolean] $exit_on_failure = undef,
+
+ String $seat_name = $name,
+ Integer[0] $order = 0,
+) {
+ if $order > $lightdm::conf::seat_fragment_max - $lightdm::conf::seat_fragment_min {
+ fail("order (${order}) outside allowed range")
+ }
+
+ $conf = {
+ 'type' => $type,
+ 'pam-service' => $pam_service,
+ 'pam-autologin-service' => $pam_autologin_service,
+ 'pam-greeter-service' => $pam_greeter_service,
+ 'xserver-command' => $xserver_command,
+ 'xmir-command' => $xmir_command,
+ 'xserver-config' => $xserver_config,
+ 'xserver-layout' => $xserver_layout,
+ 'xserver-allow-tcp' => $xserver_allow_tcp,
+ 'xserver-share' => $xserver_share,
+ 'xserver-hostname' => $xserver_hostname,
+ 'xserver-display-number' => $xserver_display_number,
+ 'xdmcp-manager' => $xdmcp_manager,
+ 'xdmcp-port' => $xdmcp_port,
+ 'xdmcp-key' => $xdmcp_key,
+ 'greeter-session' => $greeter_session,
+ 'greeter-hide-users' => $greeter_hide_users,
+ 'greeter-allow-guest' => $greeter_allow_guest,
+ 'greeter-show-manual-login' => $greeter_show_manual_login,
+ 'greeter-show-remote-login' => $greeter_show_remote_login,
+ 'user-session' => $user_session,
+ 'allow-user-switching' => $allow_user_switching,
+ 'allow-guest' => $allow_guest,
+ 'guest-session' => $guest_session,
+ 'session-wrapper' => $session_wrapper,
+ 'greeter-wrapper' => $greeter_wrapper,
+ 'guest-wrapper' => $guest_wrapper,
+ 'display-setup-script' => $display_setup_script,
+ 'display-stopped-script' => $display_stopped_script,
+ 'greeter-setup-script' => $greeter_setup_script,
+ 'session-setup-script' => $session_setup_script,
+ 'session-cleanup-script' => $session_cleanup_script,
+ 'autologin-guest' => $autologin_guest,
+ 'autologin-user' => $autologin_user,
+ 'autologin-user-timeout' => $autologin_user_timeout,
+ 'autologin-session' => $autologin_session,
+ 'autologin-in-background' => $autologin_in_background,
+ 'exit-on-failure' => $exit_on_failure,
+ }
+
+ concat::fragment { "lightdm - config - seat - ${seat_name}":
+ target => $lightdm::config::filename,
+ order => 20 + $order,
+ content => {
+ sections => { "Seat:${seat_name}" => $conf },
+ },
+ }
+}
diff --git a/manifests/vncserver.pp b/manifests/vncserver.pp
new file mode 100644
index 0000000..a68e07d
--- /dev/null
+++ b/manifests/vncserver.pp
@@ -0,0 +1,43 @@
+# @summary VNC Server configuration
+#
+# @param enabled
+# True if VNC connections should be allowed
+# @param command
+# Command to run Xvnc server with
+# @param port
+# TCP/IP port to listen for connections on
+# @param listen_address
+# Host/address to listen for VNC connections (use all addresses if not present)
+# @param width
+# Width of display to use
+# @param height
+# Height of display to use
+# @param depth
+# Color depth of display to use
+class lightdm::vncserver (
+ Boolean $enabled = false,
+ Optional[String] $command = undef,
+ Optional[Stdlib::Port] $port = undef,
+ Optional[String] $listen_address = undef,
+ Optional[Integer[0]] $width = undef,
+ Optional[Integer[0]] $height = undef,
+ Optional[Integer[0]] $depth = undef,
+) {
+ $conf = {
+ 'enabled' => $enabled,
+ 'command' => $command,
+ 'port' => $port,
+ 'listen-address' => $listen_address,
+ 'width' => $width,
+ 'height' => $height,
+ 'depth' => $depth,
+ }
+
+ concat::fragment { 'lightdm - config - vncserver':
+ target => $lightdm::config::filename,
+ order => $lightdm::conf::seat_fragment_min + 2,
+ content => {
+ sections => { 'VNCServer' => $conf },
+ },
+ }
+}
diff --git a/manifests/xdmcpserver.pp b/manifests/xdmcpserver.pp
new file mode 100644
index 0000000..2206b42
--- /dev/null
+++ b/manifests/xdmcpserver.pp
@@ -0,0 +1,40 @@
+# @summary XDMCP Server configuration
+#
+# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively
+# it can be a word and the first 7 characters are used as the key.
+#
+# @param enabled
+# True if XDMCP connections should be allowed
+# @param port
+# UDP/IP port to listen for connections on
+# @param listen_address
+# Host/address to listen for XDMCP connections (use all addresses if not present)
+# @param key
+# Authentication key to use for XDM-AUTHENTICATION-1 or blank to not
+# use authentication (stored in keys.conf)
+# @param hostname
+# Hostname to report to XDMCP clients (defaults to system hostname if unset)
+class lightdm::xdmcpserver (
+ Boolean $enabled = true,
+ # getent services xdmcp
+ Stdlib::Port $port = 177,
+ Optional[String] $listen_address = undef,
+ Optional[String] $key = undef,
+ Optional[String] $hostname = undef,
+) {
+ $conf = {
+ 'enabled' => $enabled,
+ 'port' => $port,
+ 'listen-address' => $listen_address,
+ 'key' => $key,
+ 'hostname' => $hostname,
+ }
+
+ concat::fragment { 'lightdm - config - xdmcpserver':
+ target => $lightdm::config::filename,
+ order => $lightdm::conf::seat_fragment_min + 1,
+ content => {
+ sections => { 'XDMCPServer' => $conf },
+ },
+ }
+}
diff --git a/metadata.json b/metadata.json
new file mode 100644
index 0000000..d4c0ee3
--- /dev/null
+++ b/metadata.json
@@ -0,0 +1,26 @@
+{
+ "name": "HugoNikanor-lightdm",
+ "version": "0.1.0",
+ "author": "Hugo Hörnquist",
+ "license": "Apache-2.0",
+ "summary": "Configures the LightDM display manager",
+ "source": "",
+ "dependencies": [
+ {
+ "name": "puppetlabs/stdlib",
+ "version_requirement": ">= 8.1.0 < 9.0.0"
+ },
+ {
+ "name": "puppetlabs/concat",
+ "version_requirement": ">= 7.2.0 < 8.0.0"
+ }
+ ],
+ "operatingsystem_support": [
+ {
+ "operatingsystem": "Archlinux"
+ }
+ ],
+ "pdk-version": "2.5.0",
+ "template-url": "pdk-default#2.5.0",
+ "template-ref": "tags/2.5.0-0-g369d483"
+}
diff --git a/pdk.yaml b/pdk.yaml
new file mode 100644
index 0000000..4bef4bd
--- /dev/null
+++ b/pdk.yaml
@@ -0,0 +1,2 @@
+---
+ignore: []
diff --git a/templates/ini.epp b/templates/ini.epp
new file mode 100644
index 0000000..59c41d8
--- /dev/null
+++ b/templates/ini.epp
@@ -0,0 +1,13 @@
+<%- | Hash[String, Hash[String, Any]] $sections,
+| -%>
+<%- $sections.each |$header, $values| { -%>
+ <%- $values.each |$key, $value| { -%>
+ <%- if $value == undef { -%>
+ <%- } elsif $value =~ Array { -%>
+<%= $key %>=<%= $value.join(' ') %>
+ <%- } else { -%>
+<%= $key %>=<%= $value %>
+ <%- } -%>
+ <%- } -%>
+<%- } -%>
+
diff --git a/templates/lightdm.conf.epp b/templates/lightdm.conf.epp
new file mode 100644
index 0000000..9736255
--- /dev/null
+++ b/templates/lightdm.conf.epp
@@ -0,0 +1,170 @@
+#
+# General configuration
+#
+# start-default-seat = True to always start one seat if none are defined in the configuration
+# greeter-user = User to run greeter as
+# minimum-display-number = Minimum display number to use for X servers
+# minimum-vt = First VT to run displays on
+# lock-memory = True to prevent memory from being paged to disk
+# user-authority-in-system-dir = True if session authority should be in the system location
+# guest-account-script = Script to be run to setup guest account
+# logind-check-graphical = True to on start seats that are marked as graphical by logind
+# log-directory = Directory to log information to
+# run-directory = Directory to put running state in
+# cache-directory = Directory to cache to
+# sessions-directory = Directory to find sessions
+# remote-sessions-directory = Directory to find remote sessions
+# greeters-directory = Directory to find greeters
+# backup-logs = True to move add a .old suffix to old log files when opening new ones
+# dbus-service = True if LightDM provides a D-Bus service to control it
+#
+
+[LightDM]
+start-default-seat=true
+#greeter-user=lightdm
+#minimum-display-number=0
+minimum-vt=7 # Setting this to a value < 7 implies security issues, see FS#46799
+#lock-memory=true
+#user-authority-in-system-dir=false
+#guest-account-script=guest-account
+#logind-check-graphical=false
+#log-directory=/var/log/lightdm
+run-directory=/run/lightdm
+#cache-directory=/var/cache/lightdm
+#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions
+#remote-sessions-directory=/usr/share/lightdm/remote-sessions
+#greeters-directory=$XDG_DATA_DIRS/lightdm/greeters:$XDG_DATA_DIRS/xgreeters
+#backup-logs=true
+#dbus-service=true
+
+#
+# Seat configuration
+#
+# Seat configuration is matched against the seat name glob in the section, for example:
+# [Seat:*] matches all seats and is applied first.
+# [Seat:seat0] matches the seat named "seat0".
+# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client".
+#
+# type = Seat type (local, xremote)
+# pam-service = PAM service to use for login
+# pam-autologin-service = PAM service to use for autologin
+# pam-greeter-service = PAM service to use for greeters
+# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
+# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option)
+# xserver-config = Config file to pass to X server
+# xserver-layout = Layout to pass to X server
+# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
+# xserver-share = True if the X server is shared for both greeter and session
+# xserver-hostname = Hostname of X server (only for type=xremote)
+# xserver-display-number = Display number of X server (only for type=xremote)
+# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
+# xdmcp-port = XDMCP UDP/IP port to communicate on
+# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# greeter-session = Session to load for greeter
+# greeter-hide-users = True to hide the user list
+# greeter-allow-guest = True if the greeter should show a guest login option
+# greeter-show-manual-login = True if the greeter should offer a manual login option
+# greeter-show-remote-login = True if the greeter should offer a remote login option
+# user-session = Session to load for users
+# allow-user-switching = True if allowed to switch users
+# allow-guest = True if guest login is allowed
+# guest-session = Session to load for guests (overrides user-session)
+# session-wrapper = Wrapper script to run session with
+# greeter-wrapper = Wrapper script to run greeter with
+# guest-wrapper = Wrapper script to run guest sessions with
+# display-setup-script = Script to run when starting a greeter session (runs as root)
+# display-stopped-script = Script to run after stopping the display server (runs as root)
+# greeter-setup-script = Script to run when starting a greeter (runs as root)
+# session-setup-script = Script to run when starting a user session (runs as root)
+# session-cleanup-script = Script to run when quitting a user session (runs as root)
+# autologin-guest = True to log in as guest by default
+# autologin-user = User to log in with by default (overrides autologin-guest)
+# autologin-user-timeout = Number of seconds to wait before loading default user
+# autologin-session = Session to load for automatic login (overrides user-session)
+# autologin-in-background = True if autologin session should not be immediately activated
+# exit-on-failure = True if the daemon should exit if this seat fails
+#
+
+[Seat:*]
+#type=local
+#pam-service=lightdm
+#pam-autologin-service=lightdm-autologin
+#pam-greeter-service=lightdm-greeter
+#xserver-command=X
+#xmir-command=Xmir
+#xserver-config=
+#xserver-layout=
+#xserver-allow-tcp=false
+#xserver-share=true
+#xserver-hostname=
+#xserver-display-number=
+#xdmcp-manager=
+#xdmcp-port=177
+#xdmcp-key=
+#greeter-session=lightdm-mini-greeter
+greeter-session=lightdm-slick-greeter
+greeter-hide-users=false
+#greeter-allow-guest=true
+#greeter-show-manual-login=false
+#greeter-show-remote-login=true
+#user-session=default
+#allow-user-switching=true
+#allow-guest=true
+#guest-session=
+session-wrapper=/etc/lightdm/Xsession
+#greeter-wrapper=
+#guest-wrapper=
+#display-setup-script=
+#display-stopped-script=
+#greeter-setup-script=
+#session-setup-script=
+#session-cleanup-script=
+#autologin-guest=false
+#autologin-user=hugo
+#autologin-user-timeout=0
+#autologin-in-background=false
+#autologin-session=
+#exit-on-failure=false
+
+#
+# XDMCP Server configuration
+#
+# enabled = True if XDMCP connections should be allowed
+# port = UDP/IP port to listen for connections on
+# listen-address = Host/address to listen for XDMCP connections (use all addresses if not present)
+# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
+# hostname = Hostname to report to XDMCP clients (defaults to system hostname if unset)
+#
+# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively
+# it can be a word and the first 7 characters are used as the key.
+#
+
+greeter-show-manual-login=true
+
+[XDMCPServer]
+#enabled=false
+#port=177
+#listen-address=
+#key=
+#hostname=
+
+#
+# VNC Server configuration
+#
+# enabled = True if VNC connections should be allowed
+# command = Command to run Xvnc server with
+# port = TCP/IP port to listen for connections on
+# listen-address = Host/address to listen for VNC connections (use all addresses if not present)
+# width = Width of display to use
+# height = Height of display to use
+# depth = Color depth of display to use
+#
+
+[VNCServer]
+enabled=true
+command=Xvnc
+#port=5900
+#listen-address=
+#width=1024
+#height=768
+#depth=8