Midnight Commander adbfs external fs plugin
This is Midnight Commander extfs plugin for browsing Android device through
adb
interface written in Python.
Rquirements
- Python 3.x (tested on 3.5.4, 3.6 and 3.7)
adb
installed and in$PATH
or provided via the config file- An Android device or emulator preferably rooted
busybox
(toolbox
,toybox
) installed and available in the path on the device
Make sure, that issuing from command line:
$ adb shell busybox ls
$ # or in case of no PATH adb placement
$ /path/to/adb shell busybox ls
it should display files from root directory on the device.
Features
- Listing the directory with (default), or without skipping system dirs
(
acct
,dev
,proc
, etc) - Copying files from and to the device
- Creating directories
- Removing files and directories
- Symbolic links in lists are corrected to be relative to the file system
- Symbolic links also point to the right target, skipping intermediate links
Installation
Copy adbfs into ~/.local/share/mc/extfs.d/
directory and make it executable
if needed.
Usage
To use it, just issue:
$ cd adbfs://
under MC - after some time you should see the files and directories on your device. For convenience you can add a bookmark (accessible under CTRL+\) for fast access. The time is depended on how many files and directories you have on your device and how fast it is :)
Configuration
You can configure behaviour of this plugin using .ini
file located under
$XDG_CONFIG_HOME/mc/adbfs.ini
(which usually is located under
~/.config/mc/adbfs.ini
), and have default values, like:
[adbfs]
debug = false
dirs_to_skip = ["acct", "charger", "d", "dev", "proc", "sys"]
suppress_colors = false
root =
adb_command = adb
adb_connect =
try_su = false
where:
debug
will provide a little bit more verbose information, useful for debuggingdirs_to_skip
list of paths to directories which will be skipped during reading. If leaved empty, or setted to empty list ([]
) will read everything (slow!)suppress_colors
this option will makebusybox
not to display colors, helpful, ifbusybox ls
is configured to display colors by default. Does not affecttoolbox
ortoybox
.root
root directory to read. Everything outside of that directory will be omitted. That would be the fastest way to access certain location on the device. Note, thatdirs_to_skip
still apply inside this directory.adb_command
absolute or relative path toadb
command.~/
or environment variables are allowed.adb_connect
specifies if connection to specific device needs to be performed before accessing shell. It is useful for adb over network feature. Typical value here is a device IP address with optional port, which defaults to 5555.try_su
specifies whether or not to try to detect ifsu
command is available and usable.
Contribution
There is a Makefile
in the top directory, which is basic helper for running
the tests. Please use it, and adapt/add tests for provided fixes/functionality.
The reason why tox wasn't used is, that there is no setup.py
file, and
it's difficult to install simple script, which isn't a python module (python
interpreter will refuse to import module without .py
extension).
It requires GNU make
program, and also virtualenv
. Using it is simple
as running following command:
$ make
it will run py3 and flake8 jobs to check it against the code. For running tests against Python 3:
$ make py3
or flake 8:
$ make flake8
Exit status on any of those means that test fail. Appropriate message/traceback will also be visible.
Limitations
- Initial listing might be slow. Depending on how fast the device is, how many files are on the device and so on
- Some filenames might be still inaccessible for operating
- All files operations which needs root privileges will fail (for now)
- The implementation is experimental and it's by now working with mine device; while it might not work with yours
License
This software is licensed under 3-clause BSD license. See LICENSE file for details.