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…
Leave a Reply