How to use the default file manager on Librem 5?

Well sure you don’t have to convince me, but it’s not very user friendly for basic file operations.

When being “forced” to do this, I find the Tab key (filename completion) more handy than usual because typing long filenames using an onscreen keyboard is slow and typo-prone etc.

Another difficulty is that this is a generic problem across all GUI applications and so, while shell commands may substitute for file operations, there will be other GUI applications where no easy equivalent shell command exists.

2 Likes

Sorta related: a collection of file manager enhanced action scripts for most of the popular linux graphical file managers - a way to add more functionalities and shortcuts to your touch friendly device (or desktop). From the repo:

While numerous Nautilus Scripts are available for file managers on the web, many suffer from poor functionality, lack of error checking, and dependency management. Some scripts only work with files that don’t have special characters in their names, among other limitations. To address these shortcomings, I have developed my own set of scripts, which offer the following advantages:

  • Parallel task execution: Processes multiple files simultaneously. Very fast!
  • Multi-language support: Automatically detects the system language and displays messages in the appropriate language.
  • Progress dialog: Displays a progress dialog and allows interruption of tasks at any time.
  • Dependency management: Prompts users to install any missing dependencies.
  • Status notifications: Notifies users of dependency errors and types.
  • Keyboard accelerators: Provides keyboard shortcuts for some scripts.
  • Easy access to recent scripts: Includes a menu, Accessed recently, to quickly access recently used scripts.
  • Category-based installation: The installer allows you to choose which script categories you want to install, so there’s no need to install everything.
  • Log file: Produces an Errors.log file when a task finishes with an error.
  • File manager compatibility: Designed for major file managers like GNOME Files (Nautilus), Nemo, Caja, Dolphin, and Thunar.
  • Distro compatibility: Works on major GNU/Linux distributions, such as Debian, Ubuntu, Fedora, and Arch Linux.
  • Easy adaptation: Scripts can be easily copied and adapted for other purposes.
  • Bash implementation: All scripts are implemented in Bash. So, the scripts work well in the shell (without a graphical interface) and file managers.
  • Shell script validation: All scripts have been checked using ShellCheck.

Design philosophy: Fewer clicks, dependencies, and verbose notifications, with a simple and intuitive directory structure.

1 Like

Is there a comprehensive list of what functionality the scripts actually offer? I can see from the screenshot what “Checksum” offers but what about other categories?

Tsk tsk though. curl/wget straight into bash is considered poor security practice.

I understand that we want things to be simple but at the same time there is an opportunity for user education about why users really ought not do what you are telling them to do. (I am not for one moment suggesting that you or the repo are malicious. I am only commenting on how we train users into bad habits / train users out of bad habits.)

1 Like

To get a list of those functionalities and categories, you can look at the directory structure: it’s one-to-one with the menu tree of the scripts and all the scripts are named logically (like: “Image” → “Image:convert” → “Image: Convert to JPG”). If you click on any of the files in the repo view, it opens the tree on the left. I like that there are scripts here that make some security habits more easily and readily available, but also helps new linux users who aren’t that familiar with console commands.

Here is the listing of all the categories and scripts/functions

Archive

Compress to .7z (each)
Compress to .7z with password (each)
Compress to .iso (each)
Compress to .squashfs (each)
Compress to .tar.gz (each)
Compress to .tar.xz (each)
Compress to .tar.zst (each)
Compress to .zip (each)
Compress to .zip with password (each)
Extract here

Audio and Video

Audio and Video: Tools
    Media: Concatenate files
    Media: Remove metadata
    Media: Show basic metadata
Audio: Channels
    Audio: Mix channels to mono
    Audio: Mix two files
Audio: Convert
    Audio: Convert to FLAC
    Audio: Convert to MP3 (192 kbps)
    Audio: Convert to MP3 (320 kbps)
    Audio: Convert to MP3 (48 kbps)
    Audio: Convert to OGG (192 kbps)
    Audio: Convert to OGG (320 kbps)
    Audio: Convert to OGG (48 kbps)
    Audio: Convert to OPUS (192 kbps)
    Audio: Convert to OPUS (320 kbps)
    Audio: Convert to OPUS (48 kbps)
    Audio: Convert to WAV
Audio: Effects
    Audio: Fade-in
    Audio: Fade-out
    Audio: Remove silent sections
    Audio: Silence noise
    Audio: Trim silence
    Audio: Volume normalize
Audio: MP3 files
    MP3: (artist - title) Filename to ID3
    MP3: (artist - title) ID3 to Filename
    MP3: Repair (recursive)
    MP3: Show encoding details
    MP3: Volume maximize (recursive)
    MP3: Volume normalize (recursive)
Audio: Quality
    Audio: Check quality
    Audio: Produce a spectrogram
Video: Aspect ratio
    Video: Aspect to 16:10
    Video: Aspect to 16:9
    Video: Aspect to 1:1
    Video: Aspect to 2.21:1
    Video: Aspect to 2.35:1
    Video: Aspect to 2.39:1
    Video: Aspect to 4:3
    Video: Aspect to 5:4
Video: Audio track
    Video: Extract audio
    Video: Remove audio
Video: Convert
    Video: Convert to MKV (no re-encoding)
    Video: Convert to MKV
    Video: Convert to MP4 (no re-encoding)
    Video: Convert to MP4
    Video: Export to GIF
Video: Export frames
    Video: Export frames (1 FPS)
    Video: Export frames (10 FPS)
    Video: Export frames (5 FPS)
Video: Flip, Rotate
    Video: Flip (horizontally)
    Video: Flip (vertically)
    Video: Rotate (180 deg)
    Video: Rotate (270 deg)
    Video: Rotate (90 deg)
Video: Frame rate
    Video: Frame rate to 30 FPS
    Video: Frame rate to 60 FPS
Video: Resize
    Video: Resize (25 pct)
    Video: Resize (50 pct)
    Video: Resize (75 pct)
Video: Speed
    Video: Speed to 0.5
    Video: Speed to 1.5
    Video: Speed to 2.0

Checksum

Compute CRC32
Compute MD5
Compute SHA1
Compute SHA256
Compute SHA512
Compute all checksums
Generate MD5 file
Generate SHA1 file
Generate SHA256 file
Generate SHA512 file
Verify MD5 file
Verify SHA1 file
Verify SHA256 file
Verify SHA512 file

Clipboard

Copy file content
Copy filename (recursive)
Copy filename
Copy filepath (recursive)
Copy filepath
Paste clipboard

Directories and Files

Compare items (via Diff)
Find duplicate files
Find empty directories
Find hidden items
Find junk files
Find zero-byte files
Flatten directory structure
List largest directories
List largest files
List permissions and owners
List recently modified files
Reset permissions (recursive)
Show file MIME type
Show file information
Show file metadata
Show media information

Document

Document: Convert
    Document: Convert to DOCX
    Document: Convert to EPUB
    Document: Convert to FB2
    Document: Convert to Markdown
    Document: Convert to ODP
    Document: Convert to ODS
    Document: Convert to ODT
    Document: Convert to PDF
    Document: Convert to PPTX
    Document: Convert to TXT
    Document: Convert to XLSX
Document: Print
    Document: Print (A4)
    Document: Print (US Legal)
    Document: Print (US Letter)
PDF: Annotations
    PDF: Find annotated PDFs
    PDF: Remove annotations
PDF: Combine, Split
    PDF: Combine multiple PDFs
    PDF: Split into single-page PDFs
PDF: Multiple-page layout
    PDF: Layout (landscape, 1x2)
    PDF: Layout (landscape, 2x1)
    PDF: Layout (landscape, 2x2)
    PDF: Layout (landscape, 2x4)
    PDF: Layout (landscape, 4x2)
    PDF: Layout (portrait, 1x2)
    PDF: Layout (portrait, 2x1)
    PDF: Layout (portrait, 2x2)
    PDF: Layout (portrait, 2x4)
    PDF: Layout (portrait, 4x2)
PDF: Optimize, Reduce
    PDF: Find non-linearized PDFs
    PDF: Optimize for web (linearize)
    PDF: Reduce (150 dpi, e-book)
    PDF: Reduce (300 dpi, printer)
PDF: Page size
    PDF: Set size (A3)
    PDF: Set size (A4)
    PDF: Set size (A5)
    PDF: Set size (US Legal)
    PDF: Set size (US Letter)
PDF: Rotate
    PDF: Rotate (180 deg)
    PDF: Rotate (270 deg)
    PDF: Rotate (90 deg)
PDF: Security
    PDF: Find password-protected PDFs
    PDF: Remove password
    PDF: Set a password
PDF: Signatures
    PDF: Find signed PDFs
    PDF: Show signatures
PDF: Text recognition (OCR)
    PDF: Find non-searchable PDFs
    PDF: Perform OCR (English)
    PDF: Perform OCR (French)
    PDF: Perform OCR (German)
    PDF: Perform OCR (Italian)
    PDF: Perform OCR (Portuguese)
    PDF: Perform OCR (Russian)
    PDF: Perform OCR (Spanish)
PDF: Tools
    PDF: Convert to PDFA-2b
    PDF: Extract images
    PDF: Remove metadata
PDF: Watermark
    PDF: Add watermark (overlay)
    PDF: Add watermark (underlay)

Encryption

GPG: Encrypt with keys (ASCII)
GPG: Encrypt with keys
GPG: Encrypt with password (ASCII)
GPG: Encrypt with password
GPG: Import key
GPG: Sign (ASCII)
GPG: Sign (detached signature)
GPG: Sign
GPG: Verify signature

Image

Image: Color
    Image: Colorspace to gray
    Image: Desaturate
    Image: Generate multiple hues
Image: Combine, Split
    Image: Combine into a GIF
    Image: Combine into a PDF
    Image: Split into 2 (horizontally)
    Image: Split into 2 (vertically)
    Image: Split into 4
    Image: Stack (horizontally)
    Image: Stack (vertically)
Image: Convert
    Image: Convert to AVIF
    Image: Convert to BMP
    Image: Convert to GIF
    Image: Convert to HEIC
    Image: Convert to JPG
    Image: Convert to JXL
    Image: Convert to PNG
    Image: Convert to TIFF
    Image: Convert to WebP
    Image: Export to PDF
Image: Crop, Resize
    Image: Automatic crop (15 pct)
    Image: Automatic crop
    Image: Resize (25 pct)
    Image: Resize (50 pct)
    Image: Resize (75 pct)
    Image: Resize and crop (1080x1080)
    Image: Resize and crop (1920x1080)
    Image: Resize and crop (2560x1440)
    Image: Resize and crop (3840x2160)
    Image: Resize and crop (512x512)
Image: Flip, Rotate
    Image: Flip (horizontally)
    Image: Flip (vertically)
    Image: Rotate (180 deg)
    Image: Rotate (270 deg)
    Image: Rotate (90 deg)
Image: Icons
    Image: Create PNG icon (128 px)
    Image: Create PNG icon (256 px)
    Image: Create PNG icon (512 px)
    Image: Create PNG icon (64 px)
Image: Metadata, Exif
    Image: Remove metadata
    Image: Rename from metadata
Image: Optimize, Reduce
    Image: Optimize PNG
    Image: Reduce (JPG, 1000kB max)
    Image: Reduce (JPG, 500kB max)
Image: SVG files
    SVG: Compress to SVGZ
    SVG: Decompress SVGZ
    SVG: Export to EPS
    SVG: Export to PDF
    SVG: Export to PNG (1024 px)
    SVG: Export to PNG (256 px)
    SVG: Export to PNG (512 px)
    SVG: Replace fonts to Charter
    SVG: Replace fonts to Helvetica
    SVG: Replace fonts to Times
Image: Text recognition (OCR)
    Image: Perform OCR (English)
    Image: Perform OCR (French)
    Image: Perform OCR (German)
    Image: Perform OCR (Italian)
    Image: Perform OCR (Portuguese)
    Image: Perform OCR (Russian)
    Image: Perform OCR (Spanish)
Image: Transparency
    Image: Background to alpha (15 pct)
    Image: Background to alpha
    Image: Color alpha to black
    Image: Color alpha to magenta
    Image: Color alpha to white
    Image: Color black to alpha (15 pct)
    Image: Color black to alpha
    Image: Color magenta to alpha (15 pct)
    Image: Color magenta to alpha
    Image: Color white to alpha (15 pct)
    Image: Color white to alpha
Image: Watermark
    Image: Add watermark (center)
    Image: Add watermark (north)
    Image: Add watermark (northeast)
    Image: Add watermark (northwest)
    Image: Add watermark (south)
    Image: Add watermark (southeast)
    Image: Add watermark (southwest)

Links

Create hard link here
Create hard link to...
Create symbolic link here
Create symbolic link to...
Find broken links
List hard links
List symbolic links
Paste as hard link
Paste as symbolic link

Network and Internet

Git: Clone URLs
Git: Open repository website
Git: Reset and pull
IP: Ping hosts
IP: Scan ports
IP: Test availability
URL: Check HTTP status
URL: Check SSL expiry
URL: Download file
URL: Show HTTP headers

Plain text

Text: Encoding
    Text: Encode to ISO-8859-1
    Text: Encode to UTF-8
    Text: List encoding
    Text: Remove accents
Text: Indentation
    Text: Convert 4 spaces to tabs
    Text: Convert 8 spaces to tabs
    Text: Convert tabs to 4 spaces
    Text: Convert tabs to 8 spaces
Text: Line breaks
    Text: Line breaks to CRLF
    Text: Line breaks to LF
    Text: List line breaks
Text: Statistics
    Text: List line count
    Text: List max line length
    Text: List word count
Text: Tools
    Text: Concatenate multiple files
    Text: List invalid chars
    Text: List issues
    Text: Normalize (CRLF, recursive)
    Text: Normalize (LF, recursive)
    Text: Remove trailing spaces

Rename files

Rename: Change dashes to spaces
Rename: Change spaces to dashes
Rename: Remove accents
Rename: Remove parentheses blocks
Rename: To lowercase (recursive)
Rename: To lowercase
Rename: To sentence case
Rename: To title case
Rename: To uppercase (recursive)
Rename: To uppercase

Security and Recovery

File carving (via Foremost)
File carving (via PhotoRec)
Scan for malware (via ClamAV)
Shred file (secure delete)

I took a look at the bash install script and it seemed ok to me (which may not suffice to all as an assurance, but it’s what’s available to all to check - these are simple scripts and this is open code). There are two methods to install - curl/wget and cloning the thing - and I kinda skipped the former and viewed the latter (but your general point is valid).

To educate: Since this is well structured and each function is in a separate file, it’s easy to look at the contents to get some sense how safe it is. I did not recognize any obfuscation. Even for any beginner to do a check (all or random) it’s easy to copy paste those texts to an AI and ask “What does this script do and is it safe to execute [add direct link or copy text]” (noting that it’s not perfect but just one way to apply open source methodology - safety comes when enough people do it and using AI is one way to get into this habit and learn).

Here's an example summary of the install.sh

What looks good

Blocks running as root: it explicitly refuses id -u == 0.
- User-scoped install: installs under your home directory (not /etc, /usr, etc.).
- No obvious persistence mechanisms in the shown code: no cron/systemd/autostart in the visible sections.
- No obvious data exfiltration: no curl/wget/ssh/upload logic appears in the sections retrieved.

Potentially risky areas to inspect (even if not “suspicious”)

Remote bootstrap mode
    - The script says: if .common-functions.sh is missing, it “download[s] the tarball and continue[s]…”, then exits.
    - That bootstrap function is where you’d want to confirm it only downloads from expected URLs (the repo) and doesn’t execute arbitrary third-party code.

Dependency installation
    - In _check_dependencies() / _install_packages(), it can run package manager commands and will use sudo when available.
    - That’s not malware, but it is a clear elevation step (limited to installing packages). The main thing to verify is that it installs only a known list of packages (it appears to) and doesn’t pull/exeute random scripts.

Copying and chmod’ing installed scripts
    - It copies repository scripts into ~/.local/share/scripts and then runs find ... -exec chmod +x.
    - This is normal for action scripts, but it means whatever is inside this repo at install time becomes executable on your system.

Suspiciousness verdict (based on what AI saw)

- No clear red flags in the visible parts: nothing like credential theft, persistence, remote shells, or exfiltration is evident.
- Moderate caution only because the installer supports remote execution/bootstrapping, so you should audit the bootstrap code path and confirm it only fetches trusted content from the repo.

[Edit to add: More extensive article about checking security/safety of repos: How to check if a GitHub repository is secure - but I’d rather separate this to another forked topic if there are more comments to this, just to stay on file manager use here]

1 Like

I am for the purposes of this thread and future users going to recommend the portfolio app as the best file mover GUI app.
That said you now have a fully functioning linux box in your hand that also makes phone calls, why not SSH into your phone and use MC (midnight commander) to move files around, another nice trick is to use VNC to get a mirrored GUI of your phone onto your computer where you can interact with that GUI with mouse, keyboard, and cut/paste.

sudo apt install ssh screen mc wayvnc

Having had Linux handhelds since before y2k I couldnt imagine the pain of having to always use that tiny gui when I have a beautiful full sized computer, alptop, and even 10" tablet that I can use as a bigger window to interact with files and everything else linux just like it was a server in some remote datacenter.

3 Likes

The primary reason I want my gadgets to be linux is to be able to complicated interactions using a full sized keyboard on a computer with a decent screen size.

2 Likes

Thank you for sharing that. Does it work well on Librem 5? Their repository seem to claim that they only work with wlroots and not mutter.

This is a VNC server for wlroots-based Wayland compositors (:no_entry: Gnome, KDE and Weston are not supported).

Still, very interesting!

1 Like

Or use a lapdock.

But let’s say that you are out and about, such that none of these three options is available. Being able to attach actions to a file manager could be a convenient compromise between … using a full-sized GUI … and beavering away at the command line.

2 Likes

I use it nearly every day, who wants to touch a phone to send a SMS? I run this script in terminal and leave it up on my phone to use tigervnc on my computer.

#!/bin/bash
wayvnc 0.0.0.0

the biggest issue I have is cut/paste for non-roman alphabets I get rectangles so there seems to be an issue of font mismatch; I just use the browser on the phone to transfer non-english text if needed.

1 Like