author | Danek Duvall <danek.duvall@oracle.com> |
Tue, 07 Apr 2015 13:31:20 -0700 | |
branch | s11-update |
changeset 4072 | db0cec748ec0 |
parent 3809 | eb8d6ce0657e |
child 4625 | 18adb92d4193 |
permissions | -rw-r--r-- |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
1 |
#!/usr/bin/python2.6 |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
2 |
|
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
3 |
# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
4 |
# |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
5 |
# Licensed under the Apache License, Version 2.0 (the "License"); you may |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
6 |
# not use this file except in compliance with the License. You may obtain |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
7 |
# a copy of the License at |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
8 |
# |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
9 |
# http://www.apache.org/licenses/LICENSE-2.0 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
10 |
# |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
11 |
# Unless required by applicable law or agreed to in writing, software |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
12 |
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
13 |
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
14 |
# License for the specific language governing permissions and limitations |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
15 |
# under the License. |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
16 |
|
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
17 |
import errno |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
18 |
import os |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
19 |
import pwd |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
20 |
import smf_include |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
21 |
import subprocess |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
22 |
import sys |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
23 |
import time |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
24 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
25 |
from subprocess import CalledProcessError, check_call, Popen |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
26 |
from tempfile import mkstemp |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
27 |
|
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
28 |
GTF = "/usr/bin/gtf" |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
29 |
SVCCFG = "/usr/sbin/svccfg" |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
30 |
SVCPROP = "/usr/bin/svcprop" |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
31 |
VNCSERVER = "/usr/bin/vncserver" |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
32 |
XRANDR = "/usr/bin/xrandr" |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
33 |
XSTARTUPHDR = "# WARNING: THIS FILE GENERATED BY SMF.\n" + \ |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
34 |
"# DO NOT EDIT THIS FILE. EDITS WILL BE LOST.\n" |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
35 |
XRESOURCES = "[[ -f ~/.Xresources ]] && /usr/bin/xrdb -merge ~/.Xresources\n" |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
36 |
XTERM = "/usr/bin/xterm" |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
37 |
# Borderless, Monospsce font, point size 14, white foreground on black |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
38 |
# background are reasonable defaults. |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
39 |
XTERMOPTS = ' -b 0 -fa Monospace -fs 14 -fg white -bg black -title ' + \ |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
40 |
'"Zone Console: $ZONENAME"' |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
41 |
XWININFO = "/usr/bin/xwininfo" |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
42 |
# Enclose command in comments to prevent xterm consuming zlogin opts |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
43 |
ZLOGINOPTS = ' -e "/usr/bin/pfexec /usr/sbin/zlogin -C -E $ZONENAME"\n' |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
44 |
XSTARTUP = XSTARTUPHDR + XRESOURCES + XTERM + XTERMOPTS + ZLOGINOPTS |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
45 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
46 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
47 |
def start(): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
48 |
check_vncserver() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
49 |
homedir = os.environ.get('HOME') |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
50 |
if not homedir: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
51 |
homedir = pwd.getpwuid(os.getuid()).pw_dir |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
52 |
os.putenv("HOME", homedir) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
53 |
set_xstartup(homedir) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
54 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
55 |
try: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
56 |
fmri = os.environ['SMF_FMRI'] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
57 |
zonename = fmri.rsplit(':', 1)[1] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
58 |
os.putenv("ZONENAME", zonename) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
59 |
desktop_name = zonename + ' console' |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
60 |
# NOTE: 'geometry' below is that which matches the size of standard |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
61 |
# 80 character undecorated xterm window using font style specified in |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
62 |
# XTERMOPTS. The geometry doesn't matter too much because the display |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
63 |
# will be resized using xrandr once the xterm geometry is established. |
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
64 |
cmd = [VNCSERVER, "-name", desktop_name, "-SecurityTypes=None", |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
65 |
"-geometry", "964x580", "-localhost", "-autokill"] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
66 |
vnc = Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
67 |
env=None) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
68 |
out, err = vnc.communicate() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
69 |
vncret = vnc.wait() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
70 |
if vncret != 0: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
71 |
print "Error starting VNC server: " + err |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
72 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
73 |
except Exception as e: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
74 |
print e |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
75 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
76 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
77 |
output = err.splitlines() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
78 |
for line in output: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
79 |
if line.startswith("New '%s' desktop is" % desktop_name): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
80 |
display = line.rpartition(' ')[2] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
81 |
host, display_num = display.split(':', 1) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
82 |
# set host prop |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
83 |
port = 5900 + int(display_num) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
84 |
print "VNC port: %d" % port |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
85 |
# set port num prop |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
86 |
cmd = [SVCCFG, '-s', fmri, 'setprop', 'vnc/port', '=', 'integer:', |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
87 |
str(port)] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
88 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
89 |
svccfg = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
90 |
stderr=subprocess.PIPE) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
91 |
out, err = svccfg.communicate() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
92 |
retcode = svccfg.wait() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
93 |
if retcode != 0: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
94 |
print "Error updating 'vnc/port' property: " + err |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
95 |
return smf_include.SMF_EXIT_ERR_FATAL |
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
96 |
resize_xserver(display, zonename) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
97 |
|
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
98 |
return smf_include.SMF_EXIT_OK |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
99 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
100 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
101 |
def stop(): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
102 |
try: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
103 |
# first kill the SMF contract |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
104 |
check_call(["/usr/bin/pkill", "-c", sys.argv[2]]) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
105 |
except CalledProcessError as cpe: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
106 |
# 1 is returncode if no SMF contract processes were matched, |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
107 |
# meaning they have already terminated. |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
108 |
if cpe.returncode != 1: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
109 |
print "failed to kill the SMF contract: %s" % cpe |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
110 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
111 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
112 |
try: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
113 |
fmri = os.environ['SMF_FMRI'] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
114 |
# reset port num prop to initial zero value |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
115 |
cmd = [SVCCFG, '-s', fmri, 'setprop', 'vnc/port', '=', 'integer:', |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
116 |
'0'] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
117 |
svccfg = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
118 |
stderr=subprocess.PIPE,) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
119 |
out, err = svccfg.communicate() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
120 |
retcode = svccfg.wait() |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
121 |
if retcode != 0: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
122 |
print "Error resetting 'vnc/port' property: " + err |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
123 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
124 |
except Exception as e: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
125 |
print e |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
126 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
127 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
128 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
129 |
def check_vncserver(): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
130 |
if not os.path.exists(VNCSERVER): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
131 |
print("VNC console service not available on this compute node. " |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
132 |
"%s is missing. Run 'pkg install x11/server/xvnc'" |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
133 |
% VNCSERVER) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
134 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
135 |
if not os.path.exists(XTERM): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
136 |
print("VNC console service not available on this compute node. " |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
137 |
"%s is missing. Run 'pkg install terminal/xterm'" |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
138 |
% XTERM) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
139 |
return smf_include.SMF_EXIT_ERR_FATAL |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
140 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
141 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
142 |
def set_xstartup(homedir): |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
143 |
vncdir = os.path.join(homedir, '.vnc') |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
144 |
xstartup_path = os.path.join(vncdir, 'xstartup') |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
145 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
146 |
try: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
147 |
os.mkdir(vncdir) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
148 |
except OSError as ose: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
149 |
if ose.errno != errno.EEXIST: |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
150 |
raise |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
151 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
152 |
# Always clobber xstartup |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
153 |
# stemp tuple = [fd, path] |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
154 |
stemp = mkstemp(dir=vncdir) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
155 |
os.write(stemp[0], XSTARTUP) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
156 |
os.close(stemp[0]) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
157 |
os.chmod(stemp[1], 0700) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
158 |
os.rename(stemp[1], xstartup_path) |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
159 |
|
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
160 |
|
4072
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
161 |
def resize_xserver(display, zonename): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
162 |
""" Try to determine xterm window geometry and resize the Xvnc display |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
163 |
to match using XRANDR. Treat failure as non-fatal since an |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
164 |
incorrectly sized console is arguably better than none. |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
165 |
""" |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
166 |
class UninitializedWindowError(Exception): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
167 |
pass |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
168 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
169 |
class UnmappedWindowError(Exception): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
170 |
pass |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
171 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
172 |
def _get_window_geometry(display, windowname): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
173 |
""" Find the xterm xwindow by name/title and extract its geometry |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
174 |
Returns: tuple of window [width, height] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
175 |
Raises: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
176 |
UninitializedWindowError if window not yet initialized |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
177 |
UnmappedWindowError if window is not viewable/mapped |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
178 |
""" |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
179 |
cmd = [XWININFO, '-d', display, '-name', windowname] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
180 |
xwininfo = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
181 |
stderr=subprocess.PIPE) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
182 |
out, err = xwininfo.communicate() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
183 |
retcode = xwininfo.wait() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
184 |
if retcode != 0: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
185 |
print "Error finding console xwindow info: " + err |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
186 |
raise UninitializedWindowError |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
187 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
188 |
width = None |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
189 |
height = None |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
190 |
mapped = False |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
191 |
for line in out.splitlines(): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
192 |
line = line.strip() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
193 |
if line.startswith("Map State:"): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
194 |
if line.split()[-1] != "IsViewable": |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
195 |
# Window is not mapped yet. |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
196 |
raise UnmappedWindowError |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
197 |
else: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
198 |
mapped = True |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
199 |
if line.startswith("Width:"): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
200 |
width = int(line.split()[1]) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
201 |
elif line.startswith("Height:"): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
202 |
height = int(line.split()[1]) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
203 |
if width and height and mapped: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
204 |
return [width, height] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
205 |
else: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
206 |
# What, no width and height??? |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
207 |
print "No window geometry info returned by " + XWINFINFO |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
208 |
raise UnmappedWindowError |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
209 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
210 |
retries = 10 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
211 |
sleep = 1 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
212 |
uninit_count = 0 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
213 |
unmap_count = 0 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
214 |
width = 0 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
215 |
height = 0 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
216 |
while uninit_count < retries and unmap_count < retries: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
217 |
try: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
218 |
width, height = _get_window_geometry(display, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
219 |
'Zone Console: ' + zonename) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
220 |
print "Discovered xterm geometry: %d x %d" % (width, height) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
221 |
break |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
222 |
except UninitializedWindowError: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
223 |
if uninit_count < retries: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
224 |
print "xterm window not initialized yet. Retrying in %ds" \ |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
225 |
% sleep |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
226 |
uninit_count += 1 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
227 |
time.sleep(sleep) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
228 |
continue |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
229 |
else: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
230 |
print "xterm window is taking too long to initialize" |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
231 |
break |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
232 |
except UnmappedWindowError: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
233 |
if unmap_count < retries: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
234 |
print "Discovered xterm not mapped yet. Retrying in %ds" \ |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
235 |
% sleep |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
236 |
unmap_count += 1 |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
237 |
time.sleep(sleep) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
238 |
continue |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
239 |
else: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
240 |
print "Discovered xterm window is taking too long to map" |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
241 |
break |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
242 |
else: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
243 |
print "Too many failed attempts to discover xterm window geometry" |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
244 |
return |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
245 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
246 |
# Generate a mode line for width and height, with a refresh of 60.0Hz |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
247 |
cmd = [GTF, str(width), str(height), '60.0', '-x'] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
248 |
gtf = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
249 |
stderr=subprocess.PIPE) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
250 |
out, err = gtf.communicate() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
251 |
retcode = gtf.wait() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
252 |
if retcode != 0: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
253 |
print "Error creating new modeline for VNC display: " + err |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
254 |
return |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
255 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
256 |
for line in out.splitlines(): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
257 |
line = line.strip() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
258 |
if line.startswith('Modeline'): |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
259 |
modeline = line.split('Modeline')[1] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
260 |
print "New optimal modeline for Xvnc server: " + modeline |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
261 |
mode = modeline.split() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
262 |
break |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
263 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
264 |
# Create a new mode for the Xvnc server using the modeline generated by gtf |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
265 |
cmd = [XRANDR, '-d', display, '--newmode'] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
266 |
cmd.extend(mode) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
267 |
newmode = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
268 |
stderr=subprocess.PIPE) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
269 |
out, err = newmode.communicate() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
270 |
retcode = newmode.wait() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
271 |
if retcode != 0: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
272 |
print "Error creating new xrandr modeline for VNC display: " + err |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
273 |
return |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
274 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
275 |
# Add the new mode to the default display output |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
276 |
modename = mode[0] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
277 |
cmd = [XRANDR, '-d', display, '--addmode', 'default', modename] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
278 |
addmode = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
279 |
stderr=subprocess.PIPE) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
280 |
out, err = addmode.communicate() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
281 |
retcode = addmode.wait() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
282 |
if retcode != 0: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
283 |
print "Error adding new xrandr modeline for VNC display: " + err |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
284 |
return |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
285 |
|
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
286 |
# Activate the new mode on the default display output |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
287 |
cmd = [XRANDR, '-d', display, '--output', 'default', '--mode', modename] |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
288 |
addmode = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
289 |
stderr=subprocess.PIPE) |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
290 |
out, err = addmode.communicate() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
291 |
retcode = addmode.wait() |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
292 |
if retcode != 0: |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
293 |
print "Error setting new xrandr modeline for VNC display: " + err |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
294 |
return |
db0cec748ec0
PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
3809
diff
changeset
|
295 |
|
3809
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
296 |
if __name__ == "__main__": |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
297 |
os.putenv("LC_ALL", "C") |
eb8d6ce0657e
PSARC/2014/377 noVNC - A browser based VNC client
Niall Power <niall.power@oracle.com>
parents:
diff
changeset
|
298 |
smf_include.smf_main() |