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