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

#initialize(display = nil) ⇒ Server

Returns a new instance of Server.



28
29
30
# File 'lib/vnctools/server.rb', line 28

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

Class Attribute Details

.executableObject



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

def executable
  @executable ||= "tightvncserver"
end

Instance Attribute Details

#displayObject (readonly)

Returns the value of attribute display.



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

def display
  @display
end

Class Method Details

.allObject



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

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

.displaysObject



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

Instance Method Details

#alive?Boolean

Returns:

  • (Boolean)


59
60
61
62
63
64
# File 'lib/vnctools/server.rb', line 59

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

#dead?Boolean

Returns:

  • (Boolean)


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

def dead?
  !alive?
end

#force_killObject



49
50
51
52
53
54
55
56
57
# File 'lib/vnctools/server.rb', line 49

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

#pid_pathObject



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

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

#startObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/vnctools/server.rb', line 32

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

#stop(force = false) ⇒ Object



43
44
45
46
47
# File 'lib/vnctools/server.rb', line 43

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