04-08-2021, 02:56 PM
About a month ago, I got my PinePhone CE with Mobian. Since soon after the box was opened, I have used it as my "daily driver" - but I am not a normal user. If the phone doesn't work, I experience no withdrawl, but instead a pleasant sense of normalcy. Perhaps I sorta live in the 1980s... It's not perfect, but it works about 95% of the time, by my rather limited definition of "works" (calls, basic texts, commandline, internet).
Below I'll mention the remaining issues, my todo items left, stuff I resolved, and some of my customizations.
Issues
Todos
Resolved
Customization: Screen Stays On
In commandline, many commands take a while to finish, while no input is needed but the user wants to watch anyway. This wrapper alias allows you to keep the screen on until the command exits. It's a mobian tweak to use it for sudo in general. This alias lets you use it for non-sudo commands, e.g. wake ping -c 30 pine64.org.
Customization: Change Background Image
If you want to change the background image automatically or otherwise via commandline, do something like this:
Customization: Microsecond Sleep
If you want to wait for a partial second, use this function. It requires Ruby or Python to be installed. This isn't really pinephone specific, but it's a prerequisite for some of the other customizations below.
Customization: Wait for Network Connectivity
If you're automating something that needs networking to come up before running a command, use this function. Requires the usleep function from above, or a similar way to get usleep at the commandline. E.g. inet-block && ping -c 1 pine64.org.
Customization: Wifi On for Just a Specific Command
If you want to be stingy with your battery and bring wifi up for just one specific command, use this function wrapper. Requires the inet-block function from above. E.g. wifi apt-get update.
Customization: Disable Packagekit for Just a Specific Command
If you want to do something Packagekit (the automated package updater) temporarily disabled, use this function wrapper. This is good for apt and related commands, to avoid being locked out. E.g. no-pkgkit wifi sudo apt update.
Customization: Update Software Using Wifi Minimally
If you want to do a quick update, while using wifi only when it's necessary, use this alias. The alias name is kept short for easy typing, but you could rename it to something that makes more obvious sense. This will ask for user confirmation an additional time, compared with a normal apt update && apt upgrade, since it is doing the download first, and then the install as a seperate command. Requires no-pkgkit and wifi functions from above. E.g. uuu.
If instead you want to get rid of that extra confirmation, at the cost of a little bit of extra time with wifi on, then use this simpler version instead:
Customization: Cellular Network On for Just a Specific Command
If you want to run a single command with cellular networking enabled, use this function wrapper. E.g. wwan ping -c 1 pine64.org.
Customization: Keep Home Directory in Git Repo
This isn't pinephone specific, and nothing above needs it. I've been doing it for a while and it made the whole process of developing and using the stuff above easier. See this guide.
Below I'll mention the remaining issues, my todo items left, stuff I resolved, and some of my customizations.
Issues
- Too hot while on a call.
- Headset audio out (speaker) works, but audio in (mic) does not work.
- Speakerphone mute does not work (pretty sure that this is a known issue, but can't find any posts).
- Speakerphone creates heavy echo for caller.
- Keyboard: "CTRL lock" by default, prefer only CTRL for next key.
- Keyboard: no CAPs lock.
Todos
- Get MMS to work (currently no picture / group messages).
- Numeric password bothers me.
- Firewall needs attention (I assume, haven't looked yet).
- Finish going through all the FAQs and forums.
Resolved
- After setup, I got a blank screen with a bar across it, lacking any kind of prompt. This is normal, it's the disk encryption key prompt. Shouldn't it maybe have a prompt, though?
- T-Mobile US works? Yes, it does. A major concern when I ordered the phone.
- Modem answers after a long downtime? Yes, it does. This was just paranoia on my part. Observed the phone waking upon incoming call, as it should.
- "Software" app doesn't update well. I don't try daily, but whenever I do it gives me one error or another. Rather than putting effort into it, I just use apt directly from shell. See related customizations below.
- During first upgrade (via apt), my PIN stopped working. It's known issue with a full description and workaround.
- After the first upgrade, some packages were "kept back". This happens infrequently with any Debian-based distribution, and various options exist to fix the issue. I prefer the safe way, with apt --with-new-pkgs upgrade.
- After fixing the last issue, some important packages were not installed. Two or three packages were missing, and mentioned in error messages. One was pinephone-support, I don't recall the other(s). I identified the packages, installed them, and marked them as automatically installed, e.g.: apt install pinephone-support and then apt-mark auto pinephone-support.
- Commandline tools (e.g. wget, perl, curl) had no root CA certificates. Determined /etc/ca-certificates.conf was blank. Fixed via dpkg-reconfigure ca-certificates.
- My contacts had not magically appeared on the phone. Very non-frustrating. I had them in a VCF, so I followed this guide to import contacts from VCF.
- My desktop (debian) got disconnected from its network each time I plugged in the pine phone. USB networking was overriding other network interfaces. I feel there's a more elegant solution than what I did, which would allow me to make network connections over USB. Since that hasn't been a priority, I just set USB network not to automatically reconnect by running this on the desktop: nmcli con mod "Wired connection 1" connection.autoconnect no.
- The UI presents no clean way to turn on and off wifi. The buttons exist, sure. However when you toggle just wifi, it also affects airplane mode, and will toggle bluetooth on even when it was previously off. Others have posted about this, and I think I recall it mentioned that it's an issue with phosh somehow, but I didn't find a "central" post. Instead, I just toggle via commandline. See related customizations below.
Customization: Screen Stays On
In commandline, many commands take a while to finish, while no input is needed but the user wants to watch anyway. This wrapper alias allows you to keep the screen on until the command exits. It's a mobian tweak to use it for sudo in general. This alias lets you use it for non-sudo commands, e.g. wake ping -c 30 pine64.org.
Code:
alias wake=/usr/bin/gnome-session-inhibit
Customization: Change Background Image
If you want to change the background image automatically or otherwise via commandline, do something like this:
Code:
gsettings get org.gnome.desktop.background picture-uri file:///home/mobian/new-background.jpg
gsettings get org.gnome.desktop.screensaver picture-uri file:///home/mobian/new-background.jpg
Customization: Microsecond Sleep
If you want to wait for a partial second, use this function. It requires Ruby or Python to be installed. This isn't really pinephone specific, but it's a prerequisite for some of the other customizations below.
Code:
function usleep {
local rubycmd pythoncmd cmddone
cmddone=""
rubycmd=`command -v ruby`
if [ ! -z "$rubycmd" -a -x "$rubycmd" ]; then
$rubycmd -e "sleep($1)"
cmddone=done
fi
pythoncmd=`command -v python`
if [ ! -z "$pythoncmd" -a -x "$pythoncmd" ]; then
$pythoncmd -c "import time; time.sleep($1);"
cmddone=done
fi
if [ -z "$cmddone" ]; then
echo subsecond sleep function not found 2>&1
return 1
fi
}
Customization: Wait for Network Connectivity
If you're automating something that needs networking to come up before running a command, use this function. Requires the usleep function from above, or a similar way to get usleep at the commandline. E.g. inet-block && ping -c 1 pine64.org.
Code:
function inet-block {
while [ $( nmcli --colors no networking connectivity ) != full ]; do
usleep 0.15
done
}
Customization: Wifi On for Just a Specific Command
If you want to be stingy with your battery and bring wifi up for just one specific command, use this function wrapper. Requires the inet-block function from above. E.g. wifi apt-get update.
Code:
function wifi {
local state
state=$( nmcli --colors no radio wifi )
if [ $state = disabled ]; then
nmcli radio wifi on
inet-block
fi
"$@"
if [ $state = disabled ]; then
nmcli radio wifi off
fi
}
Customization: Disable Packagekit for Just a Specific Command
If you want to do something Packagekit (the automated package updater) temporarily disabled, use this function wrapper. This is good for apt and related commands, to avoid being locked out. E.g. no-pkgkit wifi sudo apt update.
Code:
function no-pkgkit {
local state
systemctl is-active --quite packagekit
state=$!
[ $state = 0 ] && sudo systemctl stop packagekit
"$@"
[ $state = 0 ] && sudo systemctl start packagekit
}
Customization: Update Software Using Wifi Minimally
If you want to do a quick update, while using wifi only when it's necessary, use this alias. The alias name is kept short for easy typing, but you could rename it to something that makes more obvious sense. This will ask for user confirmation an additional time, compared with a normal apt update && apt upgrade, since it is doing the download first, and then the install as a seperate command. Requires no-pkgkit and wifi functions from above. E.g. uuu.
Code:
alias uuu='no-pkgkit wifi bash -c "sudo apt update && sudo apt --download-only upgrade" && sudo apt --no-download upgrade'
If instead you want to get rid of that extra confirmation, at the cost of a little bit of extra time with wifi on, then use this simpler version instead:
Code:
alias uuu='no-pkgkit wifi bash -c "sudo apt update && sudo apt upgrade"'
Customization: Cellular Network On for Just a Specific Command
If you want to run a single command with cellular networking enabled, use this function wrapper. E.g. wwan ping -c 1 pine64.org.
Code:
function wwan {
local device state
device=$( nmcli --color no --terse device status | awk 'BEGIN {FS=":"} $2=="gsm" {print $1}' )
if [ -z "$device" ]; then
echo wwan: could not find wwan device name 1>&2
return 1
fi
state=$( nmcli --colors no --terse device status | grep -E ^$device | cut -f3 -d: )
if [ $state = disconnected ]; then
nmcli device connect $device
inet-block
fi
"$@"
if [ $state = disconnected ]; then
nmcli device disconnect $device
fi
}
Customization: Keep Home Directory in Git Repo
This isn't pinephone specific, and nothing above needs it. I've been doing it for a while and it made the whole process of developing and using the stuff above easier. See this guide.