4 Commits

Author SHA1 Message Date
Shin'ichiro Kawasaki
e34ec61f3b Tag version 0.2.1
Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-04-11 14:14:33 +09:00
Shin'ichiro Kawasaki
e552bd21bd bluepy_helper_cap.py: Check tools out of PATH
It was informed that the required tools setcap and getcap are not placed
in /usr/bin in some user environment. They can not be executed since
they are out of PATH. To allow the script to execute the commands out of
PATH, have the script find the tools. Keep the found paths of each
command in the dictionary 'tools', and refer it to execute the commands.

Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-04-11 13:36:23 +09:00
Shin'ichiro Kawasaki
dc46869760 BLESession: Refine error message for capability check
The error message on bluepy-helper capability check failure was not
accurate. Refine it.

Signed-off-by: Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
2021-02-07 20:27:38 +09:00
Peter Butkovic
461377f7ea Fixed missing glib.h error 2021-02-07 20:25:42 +09:00
4 changed files with 29 additions and 7 deletions

View File

@@ -73,7 +73,7 @@ Installation
```sh ```sh
Ubuntu Ubuntu
$ sudo apt install bluez libbluetooth-dev libnss3-tools libcap2-bin $ sudo apt install bluez libbluetooth-dev libnss3-tools libcap2-bin libglib2.0-dev
Arch Arch
$ sudo pacman -S bluez bluez-utils nss libcap $ sudo pacman -S bluez bluez-utils nss libcap
``` ```
@@ -195,6 +195,11 @@ Please file issues to [GitHub issue tracker](https://github.com/kawasaki/pyscrli
Releases Releases
-------- --------
Release 0.2.1
* Added libglib to required package list in README.md
* Improved setcap and getcap tool finding
Release 0.2.0 Release 0.2.0
* Latency issue fix for BLE devices' write characteristics * Latency issue fix for BLE devices' write characteristics

View File

@@ -22,10 +22,26 @@ logger.propagate = False
# Check dependent tools # Check dependent tools
DEPENDENT_TOOLS = { DEPENDENT_TOOLS = {
"setcap": "libcap2-bin (Ubuntu) or libcap (Arch)", "setcap": "libcap2-bin (Ubuntu) or libcap (Arch)",
"getcap": "libcap2-bin (Ubuntu) or libcap (Arch)",
} }
tools = {}
for cmd in DEPENDENT_TOOLS: for cmd in DEPENDENT_TOOLS:
if not shutil.which(cmd): # find the tools in PATH
path = shutil.which(cmd)
if path:
tools[cmd] = path
logger.debug(f"{cmd} found: {path}")
continue
# find the tools out of PATH but in major directories
for d in ["/usr/bin", "/bin", "/usr/sbin", "/sbin"]:
path = d + '/' + cmd
if os.path.isfile(path) and os.access(path, os.X_OK):
tools[cmd] = path
logger.debug(f"{cmd} found: {path}")
break
if not cmd in tools:
print(f"'{cmd}' not found. Install package {DEPENDENT_TOOLS[cmd]}.") print(f"'{cmd}' not found. Install package {DEPENDENT_TOOLS[cmd]}.")
sys.exit(1) sys.exit(1)
@@ -42,7 +58,7 @@ def helper_path():
def is_set(): def is_set():
path = helper_path() path = helper_path()
p = subprocess.run(["getcap", path], stdout=subprocess.PIPE) p = subprocess.run([tools["getcap"], path], stdout=subprocess.PIPE)
if p.returncode != 0: if p.returncode != 0:
logger.error(f"Failed to get capability of {path}") logger.error(f"Failed to get capability of {path}")
return False return False
@@ -53,8 +69,8 @@ def setcap():
path = helper_path() path = helper_path()
if is_set(): if is_set():
return True return True
p = subprocess.run(["sudo", "setcap", "cap_net_raw,cap_net_admin+eip", p = subprocess.run(["sudo", tools["setcap"],
path]) "cap_net_raw,cap_net_admin+eip", path])
if p.returncode !=0: if p.returncode !=0:
logger.error(f"Failed to set capability to {path}") logger.error(f"Failed to set capability to {path}")
return False return False

View File

@@ -528,7 +528,8 @@ class BLESession(Session):
if self.status == self.INITIAL and method == 'discover': if self.status == self.INITIAL and method == 'discover':
if not bluepy_helper_cap.is_set(): if not bluepy_helper_cap.is_set():
logger.error("Capability is not set to bluepy helper.") logger.error("Capability is not set to bluepy helper.")
logger.error("Run bluepy_setcap.py with root privilege.") logger.error("Run bluepy_helper_cap(.py).")
logger.error("e.g. $ bluepy_helper_cap")
logger.error("e.g. $ sudo bluepy_helper_cap.py") logger.error("e.g. $ sudo bluepy_helper_cap.py")
sys.exit(1) sys.exit(1)
found_ifaces = 0 found_ifaces = 0

View File

@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup( setuptools.setup(
name="pyscrlink", name="pyscrlink",
version="0.2.0", version="0.2.1",
author="Shin'ichiro Kawasaki", author="Shin'ichiro Kawasaki",
author_email='kawasaki@juno.dti.ne.jp', author_email='kawasaki@juno.dti.ne.jp',
description='Scratch-link for Linux with Python', description='Scratch-link for Linux with Python',