mirror of
https://github.com/gryf/wicd.git
synced 2026-03-15 06:03:40 +01:00
merged cli_integration
This commit is contained in:
50
cli/README.cli
Normal file
50
cli/README.cli
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
wicd-cli is a scriptable command-line only "client" for wicd written
|
||||||
|
by Ronuk Raval.
|
||||||
|
|
||||||
|
Some usage examples for wicd-cli.py
|
||||||
|
|
||||||
|
Scan for new wireless networks and display them:
|
||||||
|
python wicd-cli.py --wireless --scan --list-networks
|
||||||
|
or (same thing, short version)
|
||||||
|
python wicd-cli.py -y -S -l
|
||||||
|
|
||||||
|
Or, you can view the networks Wicd has in its cache:
|
||||||
|
python wicd-cli.py --wireless --list-networks
|
||||||
|
|
||||||
|
If you want to do anything with these networks, you''ll need to note the
|
||||||
|
network ID listed on the left side of the above command.
|
||||||
|
|
||||||
|
Get the channel number from network 0:
|
||||||
|
python wicd-cli.py --wireless --network 0 --network-property channel
|
||||||
|
|
||||||
|
Or get all available information for a certain network, do:
|
||||||
|
python wicd-cli.py --wireless --network 0 --network-details
|
||||||
|
|
||||||
|
Or do the same for the currently connected network, do:
|
||||||
|
python wicd-cli.py --wireless --network-details
|
||||||
|
|
||||||
|
View the available encryption templates Wicd can use:
|
||||||
|
python wicd-cli.py --wireless --list-encryption-types
|
||||||
|
|
||||||
|
Look under your chosen encryption scheme for a list of required properties
|
||||||
|
(marked with "Req:"). These are additional properties that must be set before
|
||||||
|
the encryption can be used.
|
||||||
|
|
||||||
|
For example, the listing for WPA encryption looks as follows:
|
||||||
|
0 wpa WPA 1/2 (Passphrase)
|
||||||
|
Req: key (Key)
|
||||||
|
The list indicates that to use WPA encryption, the following properties must be
|
||||||
|
set:
|
||||||
|
'enctype' => 'wpa' (from the name field)
|
||||||
|
'key' => YOUR_WPA_PASSKEY (from the required field)
|
||||||
|
|
||||||
|
Use the WPA encryption scheme on network 0 by issuing the following two
|
||||||
|
commands:
|
||||||
|
python wicd-cli.py --wireless --network 0 \
|
||||||
|
--network-property enctype --set-to wpa
|
||||||
|
python wicd-cli.py --wireless --network 0 \
|
||||||
|
--network-property key --set-to YOUR_WPA_PASSKEY
|
||||||
|
|
||||||
|
Finally, we need to connect to the network:
|
||||||
|
python wicd-cli.py --wireless --network 0 --connect
|
||||||
|
|
||||||
234
cli/wicd-cli.py
Normal file
234
cli/wicd-cli.py
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# 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 2 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, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
# MA 02110-1301, USA.
|
||||||
|
|
||||||
|
import optparse
|
||||||
|
import dbus
|
||||||
|
import dbus.service
|
||||||
|
import sys
|
||||||
|
from wicd import misc
|
||||||
|
|
||||||
|
misc.RenameProcess('wicd-cli')
|
||||||
|
|
||||||
|
if getattr(dbus, 'version', (0, 0, 0)) < (0, 80, 0):
|
||||||
|
import dbus.glib
|
||||||
|
else:
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
DBusGMainLoop(set_as_default=True)
|
||||||
|
|
||||||
|
bus = dbus.SystemBus()
|
||||||
|
try:
|
||||||
|
daemon = dbus.Interface(bus.get_object('org.wicd.daemon', '/org/wicd/daemon'),
|
||||||
|
'org.wicd.daemon')
|
||||||
|
wireless = dbus.Interface(bus.get_object('org.wicd.daemon', '/org/wicd/daemon/wireless'),
|
||||||
|
'org.wicd.daemon.wireless')
|
||||||
|
wired = dbus.Interface(bus.get_object('org.wicd.daemon', '/org/wicd/daemon/wired'),
|
||||||
|
'org.wicd.daemon.wired')
|
||||||
|
config = dbus.Interface(bus.get_object('org.wicd.daemon', '/org/wicd/daemon/config'),
|
||||||
|
'org.wicd.daemon.config')
|
||||||
|
except dbus.DBusException:
|
||||||
|
print 'Error: Could not connect to the daemon. Please make sure it is running.'
|
||||||
|
sys.exit(3)
|
||||||
|
|
||||||
|
parser = optparse.OptionParser()
|
||||||
|
|
||||||
|
parser.add_option('--network', '-n', type='int', default=-1)
|
||||||
|
parser.add_option('--network-property', '-p')
|
||||||
|
parser.add_option('--set-to', '-s')
|
||||||
|
parser.add_option('--name', '-m')
|
||||||
|
|
||||||
|
parser.add_option('--scan', '-S', default=False, action='store_true')
|
||||||
|
parser.add_option('--save', '-w', default=False, action='store_true')
|
||||||
|
parser.add_option('--list-networks', '-l', default=False, action='store_true')
|
||||||
|
parser.add_option('--network-details', '-d', default=False, action='store_true')
|
||||||
|
parser.add_option('--disconnect', '-x', default=False, action='store_true')
|
||||||
|
parser.add_option('--connect', '-c', default=False, action='store_true')
|
||||||
|
parser.add_option('--list-encryption-types', '-e', default=False, action='store_true')
|
||||||
|
# short options for these two aren't great.
|
||||||
|
parser.add_option('--wireless', '-y', default=False, action='store_true')
|
||||||
|
parser.add_option('--wired', '-z', default=False, action='store_true')
|
||||||
|
parser.add_option('--load-profile', '-o', default=False, action='store_true')
|
||||||
|
|
||||||
|
options, arguments = parser.parse_args()
|
||||||
|
|
||||||
|
op_performed = False
|
||||||
|
|
||||||
|
if not (options.wireless or options.wired):
|
||||||
|
print "Please use --wireless or --wired to specify " + \
|
||||||
|
"the type of connection to operate on."
|
||||||
|
|
||||||
|
# functions
|
||||||
|
def is_valid_wireless_network_id(network_id):
|
||||||
|
if not (network_id >= 0 \
|
||||||
|
and network_id < wireless.GetNumberOfNetworks()):
|
||||||
|
print 'Invalid wireless network identifier.'
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def is_valid_wired_network_id(network_id):
|
||||||
|
num = len(config.GetWiredProfileList())
|
||||||
|
if not (network_id < num and \
|
||||||
|
network_id >= 0):
|
||||||
|
print 'Invalid wired network identifier.'
|
||||||
|
sys.exit(4)
|
||||||
|
|
||||||
|
def is_valid_wired_network_profile(profile_name):
|
||||||
|
if not profile_name in config.GetWiredProfileList():
|
||||||
|
print 'Profile of that name does not exist.'
|
||||||
|
sys.exit(5)
|
||||||
|
|
||||||
|
if options.scan and options.wireless:
|
||||||
|
# synchronized scan
|
||||||
|
wireless.Scan(True)
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.load_profile and options.wired:
|
||||||
|
is_valid_wired_network_profile(options.name)
|
||||||
|
config.ReadWiredNetworkProfile(options.name)
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.list_networks:
|
||||||
|
if options.wireless:
|
||||||
|
print '#\tBSSID\t\t\tChannel\tESSID'
|
||||||
|
for network_id in range(0, wireless.GetNumberOfNetworks()):
|
||||||
|
print '%s\t%s\t%s\t%s' % (network_id,
|
||||||
|
wireless.GetWirelessProperty(network_id, 'bssid'),
|
||||||
|
wireless.GetWirelessProperty(network_id, 'channel'),
|
||||||
|
wireless.GetWirelessProperty(network_id, 'essid'))
|
||||||
|
elif options.wired:
|
||||||
|
print '#\tProfile name'
|
||||||
|
id = 0
|
||||||
|
for profile in config.GetWiredProfileList():
|
||||||
|
print '%s\t%s' % (id, profile)
|
||||||
|
id += 1
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.network_details:
|
||||||
|
if options.wireless:
|
||||||
|
if options.network >= 0:
|
||||||
|
is_valid_wireless_network_id(options.network)
|
||||||
|
network_id = options.network
|
||||||
|
else:
|
||||||
|
network_id = wireless.GetCurrentNetworkID(0)
|
||||||
|
is_valid_wireless_network_id(network_id)
|
||||||
|
# we're connected to a network, print IP
|
||||||
|
print "IP: %s" % wireless.GetWirelessIP(0)
|
||||||
|
|
||||||
|
print "Essid: %s" % wireless.GetWirelessProperty(network_id, "essid")
|
||||||
|
print "Bssid: %s" % wireless.GetWirelessProperty(network_id, "bssid")
|
||||||
|
if wireless.GetWirelessProperty(network_id, "encryption"):
|
||||||
|
print "Encryption: On"
|
||||||
|
print "Encryption Method: %s" % \
|
||||||
|
wireless.GetWirelessProperty(network_id, "encryption_method")
|
||||||
|
else:
|
||||||
|
print "Encryption: Off"
|
||||||
|
print "Quality: %s" % wireless.GetWirelessProperty(network_id, "quality")
|
||||||
|
print "Mode: %s" % wireless.GetWirelessProperty(network_id, "mode")
|
||||||
|
print "Channel: %s" % wireless.GetWirelessProperty(network_id, "channel")
|
||||||
|
print "Bit Rates: %s" % wireless.GetWirelessProperty(network_id, "bitrates")
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
# network properties
|
||||||
|
|
||||||
|
if options.network_property:
|
||||||
|
if options.wireless:
|
||||||
|
is_valid_wireless_network_id(options.network)
|
||||||
|
if not options.set_to:
|
||||||
|
print wireless.GetWirelessProperty(options.network, options.network_property)
|
||||||
|
else:
|
||||||
|
wireless.SetWirelessProperty(options.network, \
|
||||||
|
options.network_property, options.set_to)
|
||||||
|
elif options.wired:
|
||||||
|
if not options.set_to:
|
||||||
|
print wired.GetWiredProperty(options.network_property)
|
||||||
|
else:
|
||||||
|
wired.SetWiredProperty(options.network_property, options.set_to)
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.disconnect:
|
||||||
|
daemon.Disconnect()
|
||||||
|
if options.wireless:
|
||||||
|
if wireless.GetCurrentNetworkID(0) > -1:
|
||||||
|
print "Disconnecting from %s on %s" % (wireless.GetCurrentNetwork(0),
|
||||||
|
wireless.DetectWirelessInterface())
|
||||||
|
elif options.wired:
|
||||||
|
if wired.CheckPluggedIn():
|
||||||
|
print "Disconnecting from wired connection on %s" % wired.DetectWiredInterface()
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.connect:
|
||||||
|
if options.wireless and options.network > -1:
|
||||||
|
is_valid_wireless_network_id(options.network)
|
||||||
|
name = wireless.GetWirelessProperty(options.network, 'essid')
|
||||||
|
encryption = wireless.GetWirelessProperty(options.network, 'enctype')
|
||||||
|
print "Connecting to %s with %s on %s" % (name, encryption,
|
||||||
|
wireless.DetectWirelessInterface())
|
||||||
|
wireless.ConnectWireless(options.network)
|
||||||
|
|
||||||
|
check = lambda: wireless.CheckIfWirelessConnecting()
|
||||||
|
message = lambda: wireless.CheckWirelessConnectingMessage()
|
||||||
|
elif options.wired:
|
||||||
|
print "Connecting to wired connection on %s" % wired.DetectWiredInterface()
|
||||||
|
wired.ConnectWired()
|
||||||
|
|
||||||
|
check = lambda: wired.CheckIfWiredConnecting()
|
||||||
|
message = lambda: wired.CheckWiredConnectingMessage()
|
||||||
|
|
||||||
|
# update user on what the daemon is doing
|
||||||
|
last = None
|
||||||
|
while check():
|
||||||
|
next = message()
|
||||||
|
if next != last:
|
||||||
|
# avoid a race condition where status is updated to "done" after the
|
||||||
|
# loop check
|
||||||
|
if next == "done":
|
||||||
|
break
|
||||||
|
print "%s..." % next.replace("_", " ")
|
||||||
|
last = next
|
||||||
|
print "done!"
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
# pretty print optional and required properties
|
||||||
|
def str_properties(prop):
|
||||||
|
if len(prop) == 0:
|
||||||
|
return "None"
|
||||||
|
else:
|
||||||
|
return ', '.join("%s (%s)" % (x[0], x[1].replace("_", " ")) for x in type['required'])
|
||||||
|
|
||||||
|
if options.wireless and options.list_encryption_types:
|
||||||
|
et = misc.LoadEncryptionMethods()
|
||||||
|
# print 'Installed encryption templates:'
|
||||||
|
print '%s\t%-20s\t%s' % ('#', 'Name', 'Description')
|
||||||
|
id = 0
|
||||||
|
for type in et:
|
||||||
|
print '%s\t%-20s\t%s' % (id, type['type'], type['name'])
|
||||||
|
print ' Req: %s' % str_properties(type['required'])
|
||||||
|
print '---'
|
||||||
|
# don't print optionals (yet)
|
||||||
|
#print ' Opt: %s' % str_properties(type['optional'])
|
||||||
|
id += 1
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if options.save and options.network > -1:
|
||||||
|
if options.wireless:
|
||||||
|
is_valid_wireless_network_id(options.network)
|
||||||
|
config.SaveWirelessNetworkProfile(options.network)
|
||||||
|
elif options.wired:
|
||||||
|
config.SaveWiredNetworkProfile(options.name)
|
||||||
|
op_performed = True
|
||||||
|
|
||||||
|
if not op_performed:
|
||||||
|
print "No operations performed."
|
||||||
|
|
||||||
7
in/man=wicd-cli.8.in
Normal file
7
in/man=wicd-cli.8.in
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
.\" First revision was r???
|
||||||
|
.TH WICD-CCLI "6" "November 2009"
|
||||||
|
.SH NAME
|
||||||
|
.B wicd-cli
|
||||||
|
\- commandline- only wicd(8) controller
|
||||||
|
.SH DESCRIPTION
|
||||||
|
TODO :-)
|
||||||
2
in/scripts=wicd-cli.in
Executable file
2
in/scripts=wicd-cli.in
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
exec python -O %LIB%wicd-cli.py $@
|
||||||
@@ -74,6 +74,7 @@ no_install_kde = %NO_INSTALL_KDE%
|
|||||||
no_install_acpi = %NO_INSTALL_ACPI%
|
no_install_acpi = %NO_INSTALL_ACPI%
|
||||||
no_install_docs = %NO_INSTALL_DOCS%
|
no_install_docs = %NO_INSTALL_DOCS%
|
||||||
no_install_ncurses = %NO_INSTALL_NCURSES%
|
no_install_ncurses = %NO_INSTALL_NCURSES%
|
||||||
|
no_install_cli = %NO_INSTALL_CLI%
|
||||||
no_use_notifications = %NO_USE_NOTIFICATIONS%
|
no_use_notifications = %NO_USE_NOTIFICATIONS%
|
||||||
|
|
||||||
def chdir(file):
|
def chdir(file):
|
||||||
|
|||||||
12
setup.py
12
setup.py
@@ -98,6 +98,7 @@ class configure(Command):
|
|||||||
('no-install-pmutils', None, 'do not install the pm-utils hooks'),
|
('no-install-pmutils', None, 'do not install the pm-utils hooks'),
|
||||||
('no-install-docs', None, 'do not install the auxiliary documentation'),
|
('no-install-docs', None, 'do not install the auxiliary documentation'),
|
||||||
('no-install-ncurses', None, 'do not install the ncurses client'),
|
('no-install-ncurses', None, 'do not install the ncurses client'),
|
||||||
|
('no-install-cli', None, 'do not install the command line executable'),
|
||||||
('no-use-notifications', None, 'do not ever allow the use of libnotify notifications')
|
('no-use-notifications', None, 'do not ever allow the use of libnotify notifications')
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -134,6 +135,7 @@ class configure(Command):
|
|||||||
self.no_install_pmutils = False
|
self.no_install_pmutils = False
|
||||||
self.no_install_docs = False
|
self.no_install_docs = False
|
||||||
self.no_install_ncurses = False
|
self.no_install_ncurses = False
|
||||||
|
self.no_install_cli = False
|
||||||
self.no_use_notifications = False
|
self.no_use_notifications = False
|
||||||
|
|
||||||
# Determine the default init file location on several different distros
|
# Determine the default init file location on several different distros
|
||||||
@@ -505,6 +507,16 @@ try:
|
|||||||
data.append((wpath.bin, ['scripts/wicd-curses']))
|
data.append((wpath.bin, ['scripts/wicd-curses']))
|
||||||
if not wpath.no_install_man:
|
if not wpath.no_install_man:
|
||||||
data.append(( wpath.mandir + 'man8/', ['man/wicd-curses.8']))
|
data.append(( wpath.mandir + 'man8/', ['man/wicd-curses.8']))
|
||||||
|
if not wpath.no_install_docs:
|
||||||
|
data.append(( wpath.docdir, ['curses/README.curses']))
|
||||||
|
data.append(( wpath.docdir, ['curses/TODO.curses']))
|
||||||
|
if not wpath.no_install_cli:
|
||||||
|
data.append((wpath.lib, ['cli/wicd-cli.py']))
|
||||||
|
data.append((wpath.bin, ['scripts/wicd-cli']))
|
||||||
|
if not wpath.no_install_man:
|
||||||
|
data.append(( wpath.mandir + 'man8/', ['man/wicd-cli.8']))
|
||||||
|
if not wpath.no_install_docs:
|
||||||
|
data.append(( wpath.docdir, ['cli/README.cli']))
|
||||||
piddir = os.path.dirname(wpath.pidfile)
|
piddir = os.path.dirname(wpath.pidfile)
|
||||||
if not piddir.endswith('/'):
|
if not piddir.endswith('/'):
|
||||||
piddir += '/'
|
piddir += '/'
|
||||||
|
|||||||
Reference in New Issue
Block a user