Class: VncTools::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/vnctools/server.rb

Defined Under Namespace

Classes: Error

Class Attribute Summary (collapse)

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Server) initialize(display = nil)



32
33
34
# File 'lib/vnctools/server.rb', line 32

def initialize(display = nil)
  @display = display
end

Class Attribute Details

+ (Object) executable



21
22
23
# File 'lib/vnctools/server.rb', line 21

def executable
  @executable ||= find_executable
end

Instance Attribute Details

- (Object) display (readonly)

Returns the value of attribute display



30
31
32
# File 'lib/vnctools/server.rb', line 30

def display
  @display
end

Class Method Details

+ (Object) all



15
16
17
# File 'lib/vnctools/server.rb', line 15

def all
  displays.map { |display| new ":#{display}" }
end

+ (Object) displays



11
12
13
# File 'lib/vnctools/server.rb', line 11

def displays
  Dir[File.expand_path("~/.vnc/*.pid")].map { |e| e[/(\d+)\.pid/, 1] }.compact
end

+ (Object) find_executable



25
26
27
# File 'lib/vnctools/server.rb', line 25

def find_executable
  `which tightvncserver vncserver xtightvncserver`.each_line.map(&:strip).first || 'tightvncserver'
end

Instance Method Details

- (Boolean) alive?



63
64
65
66
67
68
# File 'lib/vnctools/server.rb', line 63

def alive?
  pid_path.exist? && Process.kill(0, Integer(pid_path.read))
rescue Errno::ESRCH
  pid_path.delete if pid_path.exist?
  false
end

- (Boolean) dead?



70
71
72
# File 'lib/vnctools/server.rb', line 70

def dead?
  !alive?
end

- (Object) force_kill



53
54
55
56
57
58
59
60
61
# File 'lib/vnctools/server.rb', line 53

def force_kill
  if pid_path.exist?
    Process.kill(9, Integer(pid_path.read))
    pid_path.delete if pid_path.exist?
  end
rescue Errno::ESRCH
  # already gone
  pid_path.delete if pid_path.exist?
end

- (Object) pid_path



74
75
76
# File 'lib/vnctools/server.rb', line 74

def pid_path
  @pid_path ||= Pathname.new(File.expand_path("~/.vnc/#{host}#{display}.pid"))
end

- (Object) start



36
37
38
39
40
41
42
43
44
45
# File 'lib/vnctools/server.rb', line 36

def start
  if display
    server(display, *launch_arguments)
  else
    output = server(*launch_arguments)
    rx = /desktop is #{host}(\S+)/
    @display = output[rx, 1]
    @display or raise Error, "could not find display in #{output.inspect} =~ #{rx.source}"
  end
end

- (Object) stop(force = false)



47
48
49
50
51
# File 'lib/vnctools/server.rb', line 47

def stop(force = false)
  server "-kill", display.to_s
rescue Error
  force_kill if force
end