1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# -*- 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 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 <b>%s</b>.\nPlease enter your <b>login</b>:") % (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):
if use_host_names == True:
address = hostname
print "connecting using gnometerminal"
if txts.has_key("u"):
username = self.SshLogin(name, txts["u"])
else:
username = self.SshLogin(name)
if stype == "_ssh._tcp":
scheme = "ssh"
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 = []
cmdline.append("gnome-terminal")
cmdline.append("--tab")
cmdline.append("-t %s" % name)
cmdline.append("-e %s" % sshline)
print cmdline
pid = subprocess.Popen(cmdline).pid
def load():
return plugin_gnometerminal()
|