Here’s a little Tcl/Tk script I wrote sometime ago when I was messing with the Tcl/tk cookbook. It presents a simple dialog (in Greek) where the user enters the remote server’s IP and shared folder, the local folder (where the share folder should be mounted), as well as samba server credentials, i.e. username and password. It has pretty basic (read “zero”…) exception handling and pretty naive logic: you have to make sure that the remote and local folder exist, and that you have smbmount installed. Warning: I haven’t really test it recently. Nevertheless, it is somewhat documented and could be useful to some with a little effort. Just save it (i.e. samba_mount_tk.tcl), make executable (chmod +x samba_mount_tk.tcl), then run it (./samba_mount_tk.tcl)…

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
129
130
131
#!/usr/bin/wish

 
#     Just a simple Tk GUI to facilitate Samba shares mounting.
#     Copyright (C) 2008 Dimitris V. Kalamaras

#     This program is free software: you can redistribute it and/or modify
#     it under the terms of the GNU General Public License as published by
#     the Free Software Foundation, either version 3 of the License, or
#     (at your option) any later version.

#     This program is distributed in the hope that it will be useful,
#     but WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#     GNU General Public License for more details.

#     You should have received a copy of the GNU General Public License
#     along with this program.  If not, see <http://www.gnu.org/licenses/>.

#Στην Tcl, αναφερόμαστε στο βασικό παράθυρο με μια τελεία (.).  
#Με την wm title καθορίζουμε τον τίτλο του παραθύρου . σε "Connect to Share".
wm title . "Σύνδεση με κοινόχρηστο κατάλογο Samba"

#Δημιουργίου ενός 'κάδρου' μέσα στο βασικό παράθυρο με πλάτος περιθωρίου 2
frame .rc -borderwidth 2 
#Προβολή του κάδρου
pack .rc

# Ορισμοί καθολικών μεταβλητών -  οι δύο πρώτες είναι λίστες.
global aList vList val

# Περιεχόμενα της aList: οι ετικέτες των πεδίων μας.
set aList "
{REMOTE IP} 
{RFOLDER  }
{LFOLDER  }
{USERNAME }
{PASSWORD }"

# η vList είναι μια λίστα, αρχικά κενή. Εδώ θα βάζουμε τις τιμές των πεδίων.
set vList {}

# Στην Tcl δεν ορίζουμε τύπους στις μεταβλητές.
set maxl 0
set i 0

# Στο .rc.fff θα δημιουργήσουμε 5 πεδία εισαγωγής.
frame .rc.fff -height 40 
pack .rc.fff

# Στο rc.ent θα έχουμε μια γραμμή κειμένου ως "εξοδο".
entry .rc.ent -width 50
pack .rc.ent

# Δημιουργία πεδίων εισαγωγής με ετικέτες. 
foreach a $aList {
	#Δημιουργία πεδίου μιας γραμμής με όνομα .rc.fff.sub1 κοκ.
	set ff [frame .rc.fff.sub$i]
	pack $ff
	#Προσθήκη στο πεδίο μιας ετικέτας με μήκος 10 χαρακτήρων.
	#Το κείμενο της είναι το αντίστοιχο στοιχείο του aList.
	label $ff.lab -text $a  -width 10
	#Προσθήκη ενός πεδίου εισαγωγής δίπλα από την ετικέτα
	entry $ff.ent
	#Σύνδεση του πεδίου εισαγωγής με την υπορουτίνα argEnter
	#Η υπορουτίνα θα εκτελείται όταν ο χρήστης πατάει το πλήκτρο Return μέσα στο πεδίο εισαγωγής
	bind $ff.ent <Key-Return> [list argEnter .rc.ent $a ]
	#Επίσης θα εκτελείται όταν ο χρήστης πατάει το πλήκτρο Tab μέσα στο πεδίο εισαγωγής	
	bind $ff.ent <Tab> [list argEnter .rc.ent $a ]
	#Εισαγωγή του i στοιχείου της vList στο πεδίο εισαγωγής.
	$ff.ent insert 0 [lindex $vList $i]
	#Προβολή της ετικέτας και του πεδίου εισαγωγής
	pack $ff.lab $ff.ent -side left -in $ff
	#Αύξηση του i κατά μια μονάδα
	incr i
}

 
# Η ρουτίνα argEnter καλείται όταν ο χρήστης πατάει Enter/Return ή Tab στο πεδίο εισαγωγής 
proc argEnter { w a } {
	# Καθολικές μεταβλητές που θα χρειαστούμε
	global aList vList IP RFOLDER LFOLDER USERNAME PASSWORD fullCommand
	# Βρες τον δείκτη του a μέσα στην aList
	set idx [lsearch $aList $a]
	# Θέσε ότι περιέχει το πεδίο εισαγωγής της αντίστοιχης γραμμής στην μεταβλητή val
	set val [.rc.fff.sub$idx.ent get]
	if { $val == "" } {
			tk_messageBox -message "Δεν εισήχθη τίποτα."
		} else {
			set idx2 [lsearch $vList $val]
			#tk_messageBox -message "You entered: $val  - idx2: $idx2  - vList: $vList . "
			if {  $idx2 >= 0  } { 	# ή != -1
				tk_messageBox -message "Υπάρχει στη λίστα.."
			} else {
				 # βάλε το περιεχόμενο της val στην vList.
				lappend vList $val 
                              # tk_messageBox -message "Προσθήκη στη λίστα..."
			}
 
		}
	# Αρχικοποίηση όλων των μεταβλητών με τα δεδομένα που εισήχθησαν.
	set IP [lindex $vList 0 ]
	set RFOLDER [lindex $vList 1 ] 
	set LFOLDER  [lindex $vList 2 ]
	set USERNAME [lindex $vList 3 ]
	set PASSWORD [lindex $vList 4 ]
	set fullCommand  ""
	# Δημιουργία εντολής για το mounting
	# Προσοχη: απαιτείται η εγκατάσταση του smbmount (δες πακέτο smbfs στο Ubuntu/Debian)
	append  fullCommand "smbmount //" $IP "/" $RFOLDER "  " $LFOLDER " -o username=" $USERNAME ",password=" $PASSWORD
 
}

 
 
# Κουμπί για την επιβεβαιωτική προβολή της εντολής προσάρτησης.
button .rc.com -text "Προβολή Εντολής" -command {			
			.rc.ent insert 0 $fullCommand 
		 }
pack .rc.com

# Κουμπί εκτέλεσης της προσάρτησης
button .rc.b -text "Εκτέλεση Εντολής" -command  { 
			.rc.ent insert 0 $fullCommand [exec $fullCommand]	
		}
 
pack .rc.b

# Κουμπί εξόδου από το πρόγραμμα
button .rc.c -text "Eξοδος" -command {exit}
pack .rc.c

Here is the git repository for this code…I know, complete waste of space, but I used this code to test their services. It’s seems nice…