• FP5 bugs - SD card and Fairbuds XL headphones not working

    Fairphone 5
    6
    0 Votes
    6 Posts
    244 Views
    G
    @stanwood thanks I might revisit in like 6 months time and see if things have improved I actually own two FP5s (got a 2nd one recently very cheap second hand recently to muck around with) and for now I'm having fun using CalyxOS I did rather enjoy UT for my short few days using it. As it matures I'd love to re-visit it
  • Convergence FP4

    Fairphone 4
    3
    0 Votes
    3 Posts
    292 Views
    P
    @kugiigi thanks for your information... Better wait a while.
  • How to Get LXD Running on Ubuntu Touch (Focal & Noble)

    General
    5
    3 Votes
    5 Posts
    379 Views
    arubislanderA
    @harrisonpatm Please do! And let us know how you get on.
  • Can I boot to tty/console only?

    General
    13
    0 Votes
    13 Posts
    543 Views
    H
    @arubislander said in Can I boot to tty/console only?: While it may not be exactly what you asked, you might be interested in a post I wrote on installing LXD and running LXD containers on your UT device. I'll be trying this now, thanks for the advice
  • Currently using /e/os. How do I switch to UBports?

    Fairphone 4
    4
    0 Votes
    4 Posts
    179 Views
    MoemM
    Best of luck, and let us know how you get on!
  • Bluetooth headset no mic or audio during calls

    Unsolved Support
    2
    0 Votes
    2 Posts
    110 Views
    A
    here is log from mediahub too [21/06/2025 13:16] media-hub: Got call started signal, pausing all multimedia sessions [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio event for sink with index 13 received. [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] media-hub: AudioOutputObserver reports that output is now Speaker. [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] PulseAudio event for sink with index 0 received. [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: Session created by request of: :1.25, key: 9, uuid: {xxxxxxxxxxxxxxxxx} [21/06/2025 13:16] media-hub: Audio stream role: props,media.role=multimedia [21/06/2025 13:16] media-hub: apparmor profile name: unconfined [21/06/2025 13:16] media-hub: is_unconfined(): true [21/06/2025 13:16] media-hub: has_package_name(): false [21/06/2025 13:16] media-hub: -- app_name='unconfined', attached [21/06/2025 13:16] media-hub: Audio stream role: props,media.role=alert [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Requested state change. [21/06/2025 13:16] media-hub: Setting state: lomiri::MediaHubService::Engine::State::stopped [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: apparmor profile name: unconfined [21/06/2025 13:16] media-hub: is_unconfined(): true [21/06/2025 13:16] media-hub: has_package_name(): false [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Adding Track::Id: /com/lomiri/MediaHub/Service/sessions/9/TrackList/0 [21/06/2025 13:16] media-hub: URI: file:///home/phablet/.local/share/lomiri-system-settings/Music/xxxxxxxxxxxxxxxxx [21/06/2025 13:16] media-hub: Signaling that we just added track id: /com/lomiri/MediaHub/Service/sessions/9/TrackList/0 [21/06/2025 13:16] media-hub: ** Track was added, handling in PlayerImplementation [21/06/2025 13:16] media-hub: Calling d->m_engine->open_resource_for_uri() for first track added only: file:///home/phablet/.local/share/lomiri-system-settings/Music/xxxxxxxxxxxxxxxxx [21/06/2025 13:16] media-hub: with a Track::Id: /com/lomiri/MediaHub/Service/sessions/9/TrackList/0 [21/06/2025 13:16] media-hub: Found content type: audio/mpeg [21/06/2025 13:16] media-hub: Found content type: audio/mpeg [21/06/2025 13:16] media-hub: Found audio content [21/06/2025 13:16] media-hub: shuffle is false [21/06/2025 13:16] media-hub: Wrapping d->current_track back to begin() [21/06/2025 13:16] media-hub: Updating MPRIS TrackList properties: [21/06/2025 13:16] media-hub: Tracks: 1 [21/06/2025 13:16] media-hub: has_previous: 1 [21/06/2025 13:16] media-hub: has_next: 0 [21/06/2025 13:16] media-hub: Updating MPRIS TrackList properties: [21/06/2025 13:16] media-hub: Tracks: 1 [21/06/2025 13:16] media-hub: has_previous: 0 [21/06/2025 13:16] media-hub: has_next: 0 [21/06/2025 13:16] media-hub: State changed on playbin: READY [21/06/2025 13:16] media-hub: LoopStatus: 2 [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Setting next track on playbin (on_go_to_track signal): file:///home/phablet/.local/share/lomiri-system-settings/Music/xxxxxxxxxxxxxxxxx [21/06/2025 13:16] media-hub: with a Track::Id: /com/lomiri/MediaHub/Service/sessions/9/TrackList/0 [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Found content type: audio/mpeg [21/06/2025 13:16] media-hub: Found content type: audio/mpeg [21/06/2025 13:16] media-hub: Found audio content [21/06/2025 13:16] media-hub: Updating MPRIS TrackList properties: [21/06/2025 13:16] media-hub: Tracks: 1 [21/06/2025 13:16] media-hub: has_previous: 1 [21/06/2025 13:16] media-hub: has_next: 1 [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] media-hub: State changed on playbin: READY [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Requested state change. [21/06/2025 13:16] media-hub: Setting state: lomiri::MediaHubService::Engine::State::playing [21/06/2025 13:16] media-hub: Requesting power state [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Request system state active. [21/06/2025 13:16] media-hub: Requesting new system wakelock. [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Engine: playing uri: file:///home/phablet/.local/share/lomiri-system-settings/Music/xxxxxxxxxxxxxxxxx [21/06/2025 13:16] media-hub: Acquired new system state: lomiri::MediaHubService::power::SystemState::active [21/06/2025 13:16] media-hub: Released system state: lomiri::MediaHubService::power::SystemState::active [21/06/2025 13:16] media-hub: streams changed: file has 0 video streams and 1 audio streams [21/06/2025 13:16] media-hub: State changed on playbin: PAUSED [21/06/2025 13:16] media-hub: State changed on playbin: PLAYING [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Requested state change. [21/06/2025 13:16] media-hub: Setting state: lomiri::MediaHubService::Engine::State::paused [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: End of tracklist reached, stopping playback [21/06/2025 13:16] media-hub: Requested state change. [21/06/2025 13:16] media-hub: Setting state: lomiri::MediaHubService::Engine::State::stopped [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Updating MPRIS TrackList properties: [21/06/2025 13:16] media-hub: Tracks: 0 [21/06/2025 13:16] media-hub: has_previous: 1 [21/06/2025 13:16] media-hub: has_next: 1 [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] media-hub: apparmor profile name: unconfined [21/06/2025 13:16] media-hub: is_unconfined(): true [21/06/2025 13:16] media-hub: has_package_name(): false [21/06/2025 13:16] media-hub: -- Destroying app_name='unconfined', info='unconfined', ':1.25' [21/06/2025 13:16] media-hub: Resetting pipeline [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Release system state active. [21/06/2025 13:16] media-hub: Clearing system wakelock. [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Release display on. [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Updating MPRIS TrackList properties: [21/06/2025 13:16] media-hub: Tracks: 0 [21/06/2025 13:16] media-hub: has_previous: 1 [21/06/2025 13:16] media-hub: has_next: 1 [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Release system state active. [21/06/2025 13:16] media-hub: [21/06/2025 13:16] media-hub: Release display on. [21/06/2025 13:16] media-hub: Current player state is already stopped - no need to change state to stopped [21/06/2025 13:16] media-hub: Setting state: lomiri::MediaHubService::Engine::State::no_media [21/06/2025 13:16] PulseAudio event for sink with index 1 received. [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:16] media-hub: Checking if port is available -> 0 [21/06/2025 13:16] media-hub: Connection state for port changed to: 1 [21/06/2025 13:16] Output to wired headphone: false [21/06/2025 13:16] Output to wired headset: false [21/06/2025 13:16] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio event for sink with index 1 received. [21/06/2025 13:17] media-hub: Checking if port is available -> 0 [21/06/2025 13:17] media-hub: Connection state for port changed to: 1 [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] tp-qt 0.9.8 WARN: Channel::channelType() used with channel closed [21/06/2025 13:17] media-hub: Got call ended signal, resuming paused multimedia sessions [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio event for sink with index 1 received. [21/06/2025 13:17] media-hub: Checking if port is available -> 0 [21/06/2025 13:17] media-hub: Connection state for port changed to: 1 [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio event for sink with index 1 received. [21/06/2025 13:17] PulseAudio event for sink with index 0 received. [21/06/2025 13:17] media-hub: Checking if port is available -> 0 [21/06/2025 13:17] media-hub: Connection state for port changed to: 1 [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] media-hub: Checking if port is available -> 0 [21/06/2025 13:17] media-hub: Connection state for port changed to: 1 [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio event for sink with index 14 received. [21/06/2025 13:17] PulseAudio event for sink with index 14 received. [21/06/2025 13:17] media-hub: Connection state for port changed to: 2 [21/06/2025 13:17] media-hub: AudioOutputObserver reports that output is now External. [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available: [21/06/2025 13:17] Output to wired headphone: false [21/06/2025 13:17] Output to wired headset: false [21/06/2025 13:17] PulseAudio event for sink with index 14 received. [21/06/2025 13:17] PulseAudio sink details for sink.primary_output with index 1 is available:
  • full python clickable app prototype

    App Development
    17
    1
    1 Votes
    17 Posts
    992 Views
    developerbaymanD
    @arubislander nice ill dive more in the documentation when i get some time but thank you this is good to know
  • so im trying to build a UT rom kitchen

    Moved General
    15
    1
    0 Votes
    15 Posts
    832 Views
    phmqXPDP
    @developerbayman x86_64? I don't think that'll happen. You probably already know that Ubuntu and other GNU/Linux distributions are almost always x86(_64) (meaning they're operating systems for computers). But... Ubuntu Touch is specifically customized to run GNU/Linux on phones, instead of smartphones running default operating systems like iOS, Android, or HarmonyOS (yeah, I'm adding that here because it's a real OS). If Ubuntu Touch had an x86_64 version, I'd find that very strange... Ubuntu Touch's interface is Lomiri, so there's already an x86_64 Ubuntu "distro" using that.
  • 0 Votes
    5 Posts
    268 Views
    MrT10001M
    @Keneda I am blind and can now see. New glasses time!
  • 0 Votes
    8 Posts
    325 Views
    K
    @Alain Oh wait, so you haven't unlocked the bootloader yet earlier? I assume only the toggle in Android?
  • What is my Halium version?

    UBports Installer halium-11 ubports install
    3
    0 Votes
    3 Posts
    185 Views
    KenedaK
    @Alain said in What is my Halium version?: UBPorts Installer is built upon Halium, I think. No it is not. Halium is related to installing a "not android system" on an android system native device. Trivially it is a software that Iinks android hardware device drivers and Linux kernel ("extracted" from an android rom) with GNU/Linux operating system ported to that device. https://halium.org/ I see no "halium" anywhere on my computer. That's perfectly normal. You, as simple user installing UT on a device, don't have to deal with halium. You only have to unlock bootloader and install the required android rom on that device. have Android 11, but how do I check my halium version? Again, you don't have to, you "only" need to install the required android rom. If it's android 10 then android 10 it is... No halium stuff for you. To summarize, what you need to know, is the android version installed on your device. And if needed you have to install the exact one required before installing Ubuntu Touch.
  • FP5 finaly in device list !

    Fairphone 5
    4
    1 Votes
    4 Posts
    328 Views
    K
    To be honest, I don't think it's ready to be promoted as such. It should be listed there but not described as "best" since as you mentioned, it only has the devel channel and development is still active so big changes lands from time to time that may bring functionalities but could also land regressions. For example, proper sleep was implemented however there are quirks that came with it such as wifi issue while device is sleeping. Theoretically it is one, if not the best device for UT but currently I don't think it is.
  • Ethernet + WiFi

    Off topic
    1
    0 Votes
    1 Posts
    128 Views
    No one has replied
  • Digital Danish sovereignty

    Marketing Incubator
    4
    2 Votes
    4 Posts
    295 Views
    LakotaubpL
    @Jules We are aware of this and we are having a good look at it.
  • downgrading to Android 10 to install Ubuntu Touch

    Oneplus Nord N100
    2
    0 Votes
    2 Posts
    172 Views
    MrT10001M
    @Lindisfarne You do not need to root the device. OEM unlocking is not necessary at this stage. You need a Windows PC (running Windows) and you need to download one of the Android ROMs on the devices page for that device, unzip it and find the MSM Download tool. Please read here to understand how to use the Tool and take your time. Once the tool has finished flashing, the device will reboot, then you can set up Android, unlock the bootloader , set up Android again and then install UT. I have not got the MSM Download tool to run on Linux or in a Virtual Windows machine within Linux.
  • Advice on android apk's on m10 x306x

    Lenovo
    3
    0 Votes
    3 Posts
    120 Views
    developerbaymanD
    the .xapk contains the obb files ...so the extaction should contain the apk and obb you will need to place in the android obb folder manually
  • Setup a shared folder between UT and Waydroid

    Unsolved Waydroid
    6
    0 Votes
    6 Posts
    410 Views
    developerbaymanD
    @captainfunk try this #!/bin/bash # # Usage: # To install and set up: ./waydroid_shared_folder.sh --install # To perform mount only: ./waydroid_shared_folder.sh --mount (used by cron) # To perform chown only: ./waydroid_shared_folder.sh --chown (used by cron) # To uninstall: ./waydroid_shared_folder.sh --uninstall # To display help: ./waydroid_shared_folder.sh --help # # --- Configuration --- # Define the paths for the shared folders. # ~/shared is the folder on your Ubuntu Touch host that you will use. SHARED_DIR_HOST="$HOME/shared" # ~/.local/share/waydroid/data/media/0/shared is the corresponding folder inside Waydroid. SHARED_DIR_WAYDROID="$HOME/.local/share/waydroid/data/media/0/shared" # The primary user on Ubuntu Touch. USER_PHABLET="phablet" # The name of this script, used for cron job identification. SCRIPT_NAME=$(basename "$0") # The absolute path to this script, essential for cron to execute it correctly. SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)/$SCRIPT_NAME" # --- Functions --- # Function for logging messages to stdout with a timestamp. log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" } # Function to create the necessary shared directories if they don't exist. create_directories() { log "Creating shared directories..." # Create the host shared directory. mkdir -p "$SHARED_DIR_HOST" # Create the Waydroid internal shared directory path. mkdir -p "$SHARED_DIR_WAYDROID" if [ $? -eq 0 ]; then log "Directories created successfully." else log "Error creating directories. Please check permissions or disk space. Exiting." exit 1 fi } # Function to perform the bind mount operation. perform_bind_mount() { log "Attempting to bind mount '$SHARED_DIR_HOST' to '$SHARED_DIR_WAYDROID'..." # Check if the Waydroid shared folder is already mounted to avoid errors. if mountpoint -q "$SHARED_DIR_WAYDROID"; then log "Folder '$SHARED_DIR_WAYDROID' is already mounted. Skipping bind mount." else # Use sudo to perform the bind mount, linking the host folder to the Waydroid folder. sudo mount --bind "$SHARED_DIR_HOST" "$SHARED_DIR_WAYDROID" if [ $? -eq 0 ]; then log "Bind mount successful." # Immediately set initial permissions after a successful mount. set_folder_permissions else log "Error: Bind mount failed. This could be due to incorrect paths, Waydroid not running, or insufficient sudo permissions." log "Ensure Waydroid is running and '$SHARED_DIR_WAYDROID' exists inside its 'data/media/0' structure." exit 1 fi fi } # Function to unmount the shared folder. unmount_folder() { log "Attempting to unmount '$SHARED_DIR_WAYDROID'..." # Check if the folder is currently mounted before attempting to unmount. if mountpoint -q "$SHARED_DIR_WAYDROID"; then # Use sudo to unmount the folder. sudo umount "$SHARED_DIR_WAYDROID" if [ $? -eq 0 ]; then log "Unmount successful." else log "Error unmounting folder. This may happen if files inside are in use." log "You might need to manually unmount or reboot if it persists." exit 1 fi else log "Folder '$SHARED_DIR_WAYDROID' is not mounted. Skipping unmount." fi } # Function to set the ownership of the shared folder and its contents. set_folder_permissions() { log "Setting permissions for '$SHARED_DIR_WAYDROID' to '$USER_PHABLET:$USER_PHABLET'..." # Use sudo and the -R (recursive) flag to ensure all files and subdirectories # within the mounted shared folder are owned by the 'phablet' user. # This directly addresses the issue of Waydroid changing ownership. sudo chown -R "$USER_PHABLET":"$USER_PHABLET" "$SHARED_DIR_WAYDROID" if [ $? -eq 0 ]; then log "Permissions set successfully." else log "Error setting permissions. Check sudo permissions or ensure the path '$SHARED_DIR_WAYDROID' is valid." exit 1 fi } # Function to add cron jobs for persistence and continuous permission management. add_cron_jobs() { log "Adding cron jobs for persistence and continuous permission management..." # Get current crontab, add new entries, sort, remove duplicates, then set new crontab. # @reboot: Executes the script with '--mount' option every time the device reboots. # * * * * *: Executes the script with '--chown' option every minute to correct permissions. (crontab -l 2>/dev/null; \ echo "@reboot /bin/bash \"$SCRIPT_PATH\" --mount"; \ echo "* * * * * /bin/bash \"$SCRIPT_PATH\" --chown" \ ) | sort | uniq | crontab - if [ $? -eq 0 ]; then log "Cron jobs added successfully." log "They will run from this script's current location: $SCRIPT_PATH" log "IMPORTANT: Do NOT move or rename this script after installation, or the cron jobs will fail." log "You can verify the cron jobs by running: crontab -l" else log "Error adding cron jobs. This could be a cron service issue." exit 1 fi } # Function to remove cron jobs added by this script. remove_cron_jobs() { log "Removing cron jobs related to this script..." # List current cron jobs, filter out lines containing this script's path, and set the new crontab. crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH" | crontab - if [ $? -eq 0 ]; then log "Cron jobs removed successfully. You can verify by running: crontab -l" else log "Error removing cron jobs. You may need to manually edit your crontab (crontab -e)." exit 1 fi } # Function to display the help message. display_help() { echo "Usage: $SCRIPT_NAME [OPTION]" echo "" echo "This script automates setting up and managing a shared folder between Ubuntu Touch and Waydroid." echo "" echo "Options:" echo " --install Performs initial setup: creates directories, mounts the folder," echo " sets initial permissions, and adds cron jobs for persistence and" echo " continuous permission handling. Run this command once to set up." echo "" echo " --mount Performs only the bind mount operation and sets initial permissions." echo " This option is primarily used by the '@reboot' cron job for persistence." echo "" echo " --chown Recursively sets permissions for the shared folder and its contents" echo " to 'phablet:phablet'. This option is used by the periodic cron job" echo " to automatically correct permissions changed by Waydroid." echo "" echo " --uninstall Removes the cron jobs added by this script and unmounts the shared folder." echo " This cleans up the setup." echo "" echo " --help Display this help message." echo "" echo "Important Notes:" echo " - This script assumes you are running it as the 'phablet' user on Ubuntu Touch." echo " - It relies on 'sudo' for mount and chown commands. The 'phablet' user typically has" echo " passwordless sudo access configured by default on Ubuntu Touch." echo " - After running '--install', a reboot is recommended to ensure the @reboot cron job fires." echo " - Do not move or rename this script after installation, as the cron jobs rely on its path." echo " - While '/etc/fstab' is a common Linux method for persistence, it's generally not recommended" echo " for user-level modifications on Ubuntu Touch due to its read-only root filesystem and OTA updates." echo " Using user-specific cron jobs provides a safer and more robust solution here." } # --- Main Logic --- # Check if the script is being run as root. It should be run as the regular user (phablet). if [[ $EUID -eq 0 ]]; then log "Error: This script should NOT be run directly with 'sudo'." log "Please run it as the '$USER_PHABLET' user (e.g., just './$SCRIPT_NAME --install')." log "The script will use 'sudo' internally where necessary." exit 1 fi # Check for essential commands required by the script. if ! command -v crontab &> /dev/null; then log "Error: 'crontab' command not found. Please ensure cron is installed and available." exit 1 fi if ! command -v mountpoint &> /dev/null; then log "Error: 'mountpoint' command not found. Please ensure it's installed (usually part of 'util-linux')." exit 1 fi # Process command-line arguments. case "$1" in --install) log "Initiating installation process..." create_directories # Create the required host and Waydroid directories. perform_bind_mount # Perform the initial bind mount. add_cron_jobs # Set up cron jobs for persistence and auto-chown. log "Installation complete. Please reboot your Ubuntu Touch device for all changes to take full effect." log "The shared folder will now be persistent across reboots, and permissions will be automatically corrected." ;; --mount) log "Executing mount operation (likely from @reboot cron job)..." create_directories # Ensure directories exist (in case they were deleted). perform_bind_mount # Perform the bind mount. ;; --chown) log "Executing chown operation (likely from periodic cron job)..." # Only attempt chown if the target directory exists and is mounted. if [ -d "$SHARED_DIR_WAYDROID" ] && mountpoint -q "$SHARED_DIR_WAYDROID"; then set_folder_permissions # Correct the permissions recursively. else log "Shared Waydroid directory '$SHARED_DIR_WAYDROID' not found or not mounted. Skipping chown for now." log "This might happen if Waydroid is not running or if the mount failed." fi ;; --uninstall) log "Initiating uninstallation process..." remove_cron_jobs # Remove the cron jobs. unmount_folder # Unmount the shared folder. log "Uninstallation complete. You may manually remove the '$SHARED_DIR_HOST' directory if no longer needed." ;; --help) display_help # Show the help message. ;; *) log "Invalid option: '$1'" display_help exit 1 ;; esac log "Script execution finished."
  • UBports Database Migration

    News
    5
    1 Votes
    5 Posts
    560 Views
    F
    Edit: Turns out something was cached wrong on my machine, I think. Anyway: all is well, and the buttons work no problem
  • Any Danish users on the line?

    Off topic
    4
    0 Votes
    4 Posts
    149 Views
    I
    @Lindisfarne https://t.me/UBports_scandinavia Use Teleports if the bridge doesn't work out.
  • UBports Database Migration Completed

    News
    1
    3 Votes
    1 Posts
    144 Views
    No one has replied