# -*- coding: UTF-8 -*-
# -*- python -*-
# Copyright (C) 2005 by Sebastien Estienne
#
# This file may be distributed and/or modified under the terms of
# the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This file is distributed without any warranty; without even the implied
# warranty of merchantability or fitness for a particular purpose.
# See "COPYING" in the source distribution for more information.
#
# $id$
#
from sdapplet.pluginutils import *
try:
import gettext
gettext.bindtextdomain("service-discovery-applet", "/usr/share/locale")
gettext.textdomain("service-discovery-applet")
_ = gettext.gettext
import pygtk
pygtk.require('2.0')
import gtk
import os
import pwd
import subprocess
import gconf
import gnome
except ImportError, e:
error_msg(_("A required python module is missing!\n%s") % (e))
sys.exit()
class plugin_gnometerminal:
def __init__(self):
self.service_type = ["_ssh._tcp", "_sftp-ssh._tcp" ]
self.author = "Sébastien Estienne"
def enter_callback(self, widget, win):
win.response(gtk.RESPONSE_OK)
def SshLogin(self, hostname, username = None):
self.win = gtk.Dialog(_("SSH Connection"), None,
gtk.DIALOG_MODAL,
(gtk.STOCK_OK, gtk.RESPONSE_OK,
gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
vbox = gtk.VBox(False, 5)
self.win.vbox.pack_start(vbox, True, True, 0)
vbox.set_border_width(5)
label = gtk.Label()
label.set_markup(_("Connecting to %s.\nPlease enter your login:") % (hostname))
vbox.pack_start(label, False, False, 0)
# Create our entry
entry = gtk.Entry()
if username!= None:
entry.set_text(username)
entry.connect("activate", self.enter_callback, self.win)
vbox.pack_start(entry, False, False, 0)
# Create the completion object
completion = gtk.EntryCompletion()
# Assign the completion to the entry
entry.set_completion(completion)
# Create a tree model and use it as the completion model
completion_model = self.__create_completion_model()
completion.set_model(completion_model)
# Use model column 0 as the text column
completion.set_text_column(0)
self.win.show_all()
if self.win.run() == gtk.RESPONSE_OK:
self.win.destroy()
return entry.get_text()
else:
self.win.destroy()
return None
def __create_completion_model(self):
''' Creates a tree model containing the completions.
'''
store = gtk.ListStore(str)
iter = store.append()
store.set(iter, 0, "root")
current_user = pwd.getpwuid(os.getuid())[0]
iter = store.append()
store.set(iter, 0, current_user)
return store
def connect(self, use_host_names, name, stype, hostname, address, port, txts):
try:
terminal = gconf.client_get_default().get_string ("/desktop/gnome/applications/terminal/exec")
terminal = terminal + " " + gconf.client_get_default().get_string ("/desktop/gnome/applications/terminal/exec_arg")
except:
terminal = "gnome-terminal -x"
if use_host_names == True:
address = hostname
print "connecting using %s" % (terminal)
if txts.has_key("u"):
username = self.SshLogin(name, txts["u"])
else:
username = self.SshLogin(name)
if stype == "_ssh._tcp":
scheme = "ssh -X"
else:
scheme = "sftp"
if username == None:
return
elif username != "":
sshline = "%s -p %i %s@%s" % (scheme, port, username, address)
else:
sshline = "%s -p %i %s " % (scheme, port, address)
cmdline = terminal.split(" ")
cmdline.extend(sshline.split(" "))
print cmdline
pid = subprocess.Popen(cmdline).pid
def load():
return plugin_gnometerminal()