|
#!/usr/bin/python
from gi.repository import Gtk
import subprocess
class LauncherWindow(Gtk.Window):
"""
FreeRDP launcher window.
"""
def __init__(self):
"""
Initialize the window and widgets
"""
Gtk.Window.__init__(self, title="Python FreeRDP Launcher")
table = Gtk.Table(4, 2, False)
self.add(table)
label = Gtk.Label("Host and port")
table.attach(label, 0, 1, 0, 1)
self.addressEntry = Gtk.Entry()
table.attach(self.addressEntry, 1, 2, 0, 1)
label = Gtk.Label("Username")
table.attach(label, 0, 1, 1, 2)
self.usernameEntry = Gtk.Entry()
table.attach(self.usernameEntry, 1, 2, 1, 2)
label = Gtk.Label("Password")
table.attach(label, 0, 1, 2, 3)
self.passwordEntry = Gtk.Entry()
self.passwordEntry.set_visibility(False)
table.attach(self.passwordEntry, 1, 2, 2, 3)
button = Gtk.Button(label="Connect")
button.connect("clicked", self.connectTo)
table.attach(button, 0, 1, 3, 4)
button = Gtk.Button(label="Close")
button.connect("clicked", self.closeWindow)
table.attach(button, 1, 2, 3, 4)
def connectTo(self, button):
"""
Attempt to connect using the user input.
"""
try:
code = -1
command = [
"/usr/bin/xfreerdp",
"-K",
"-g", "workarea",
"--ignore-certificate",
"--rfx",
"--rfx-mode", "video",
"--plugin", "cliprdr",
"--plugin", "rdpsnd", "--data", "alsa", "--",
"--plugin", "drdynvc", "--data", "audin", "--"]
address = self.addressEntry.get_text()
username = self.usernameEntry.get_text()
password = self.passwordEntry.get_text()
# If the username and password are present then use them.
if username and password:
command.extend([
"-u", username,
"-p", "\"{0}\"".format(password)])
# If an address is present attempt to connect.
if address:
command.extend([address, "&"])
code = subprocess.call(" ".join(command), shell=True)
# Check the return code (if any) and close on success.
if code == 0:
Gtk.main_quit()
except:
pass
def closeWindow(self, button):
"""
Close the window and end the program.
"""
Gtk.main_quit()
window = LauncherWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
|