Welcome, Guest |
You have to register before you can post on our site.
|
Forum Statistics |
» Members: 29,476
» Latest member: alain
» Forum threads: 16,197
» Forum posts: 116,882
Full Statistics
|
Latest Threads |
Bare metal on Pinephone P...
Forum: PinePhone Pro Software
Last Post: alain
Today, 07:58 AM
» Replies: 0
» Views: 36
|
Seeking Contributors: Apa...
Forum: PinePhone Pro Software
Last Post: geometrylitegame12
Today, 01:38 AM
» Replies: 4
» Views: 3,968
|
Pinephone Pro wont boot t...
Forum: General Discussion of PinePhone Pro
Last Post: KC9UDX
Yesterday, 06:15 PM
» Replies: 5
» Views: 234
|
PinePhone Pro discontinue...
Forum: General Discussion of PinePhone Pro
Last Post: Kevin Kofler
Yesterday, 04:30 PM
» Replies: 8
» Views: 464
|
fixing the ppkb mainboard...
Forum: PinePhone Pro Accessories
Last Post: Jite
Yesterday, 02:57 PM
» Replies: 2
» Views: 106
|
Are there plannes to crea...
Forum: PinePhone Pro Hardware
Last Post: biketool
Yesterday, 04:12 AM
» Replies: 5
» Views: 981
|
prototyping to help someo...
Forum: General
Last Post: Samliams
Yesterday, 02:22 AM
» Replies: 1
» Views: 146
|
Pinephone pro stuck while...
Forum: PinePhone Pro Hardware
Last Post: Supervisor
08-16-2025, 06:40 PM
» Replies: 2
» Views: 152
|
Compatible U.S. carriers ...
Forum: General Discussion on PinePhone
Last Post: Zebulon Walton
08-15-2025, 07:34 PM
» Replies: 2
» Views: 192
|
Long dialpad keypress to ...
Forum: Mobian on PinePhone
Last Post: Zebulon Walton
08-15-2025, 06:48 PM
» Replies: 3
» Views: 128
|
|
|
Diagnosing power usage with ZZZtop |
Posted by: biketool - 10-20-2021, 09:32 AM - Forum: PinePhone Software
- Replies (1)
|
 |
If you remember the communities and dev teams behind OpenMoko or Neo900 you might know that Joerg_rw was an important EE behind these efforts he was also a very active community member and was responsible for many of the hardware function add-on hacks N900 users enjoyed.
I was IMing him today and he suggested we employ the very powerful tool zzztop to track down power issues in software and hardware which waste our battery charge.
zzztop is a fork of powertop(in the mobian repos but is optimized for x86/desktop) and is a ground up improved replacement for the custom closed source Nokia powertop-like tool developed in-house and not released.
zzztop likely needs some tweaks to get it to compile with modern libs but the source is linked in the Maemo wiki article below.
https://wiki.maemo.org/Zzztop
since I dont have zzztop compiled below is an example of powertop read over SSH from a 3/32 pinephone on battery running mobian
Code: The battery reports a discharge rate of 2.62 W
The energy consumed was 55.6 J
Summary: nan wakeups/second, nan GPU ops/seconds, nan VFS ops/sec and -0.0% CPU use
Power est. Usage Events/s Category Description
0 mW 0.0% Device runtime-1f015c0.codec-analog
0 mW 100.0% Device runtime-1c28000.serial
0 mW 100.0% Device runtime-1c15000.crypto
0 mW 100.0% Device runtime-1c22e00.codec
0 mW 100.0% Device runtime-musb-hdrc.4.auto
0 mW 100.0% Device runtime-1c10000.mmc
0 mW 100.0% Device runtime-1c28c00.serial
0 mW 100.0% Device I2C Device (2-0068): mpu6050
0 mW 6.3 pkts/s Device Network interface: wlan0 (rtl8723cs)
0 mW 100.0% Device runtime-1f03400.rsb
0 mW 100.0% Device runtime-1c28400.serial
0 mW 100.0% Device Radio device: hci_uart_h5
0 mW 6.0% Device runtime-1c0f000.mmc
0 mW 0.9% Device runtime-1c11000.mmc
0 mW 0.0% Device runtime-reg-dummy
0 mW 0.0% Device runtime-1c2ac00.i2c
0 mW 0.0% Device USB device: Generic Platform OHCI controller
0 mW 18.8% Device USB device: EG25-G (Quectel)
0 mW 0.0% Device USB device: EHCI Host Controller
0 mW 0.0% Device USB device: Generic Platform OHCI controller
0 mW 19.3% Device USB device: EHCI Host Controller
0 mW 0.0 pkts/s Device nic:vethZY3Ov2
0 mW 0.0 pkts/s Device nic:lxcbr0
0 mW 0.0 pkts/s Device nic:usb0
0 mW 0.0 pkts/s Device nic:anbox0
0 mW 0.0 pkts/s Device Network interface: wwan0 (qmi_wwan)
0 mW 0.0% Device runtime-1c19400.phy
0 mW 0.0% Device runtime-alarmtimer.0.auto
0 mW 0.0% Device runtime-1c0e000.video-codec
0 mW 0.0% Device runtime-hdmi-sound
0 mW 0.0% Device runtime-vbat-wifi
0 mW 0.0% Device runtime-1c20c00.timer
0 mW 0.0% Device runtime-1c0c000.lcd-controller
0 mW 0.0% Device runtime-1f02c00.pinctrl
0 mW 0.0% Device runtime-1c20000.clock
0 mW 0.0% Device runtime-1f03800.pwm
0 mW 0.0% Device runtime-1ef0000.hdmi-phy
0 mW 0.0% Device runtime-vcc5v0
0 mW 0.0% Device runtime-1c22800.i2s
0 mW 0.0% Device runtime-1c17000.mailbox
0 mW 0.0% Device runtime-ec25-codec
0 mW 0.0% Device runtime-usb_phy_generic.3.auto
0 mW 0.0% Device runtime-1c2b400.i2c
this is the zzztop perl script no compiling needed
I wanted to put it here it is GPLv2 by Phil Carmody (fatphil)
discussion here http://talk.maemo.org/showthread.php?t=92025
Code: #!/usr/bin/perl -w
# Zzztop.pl
#
# Copyright 2013, Phil Carmody
# Inspired by "PowerTOP", but renamed as it's more concerned with
# sleeping than it is with the actual power consumed. Detects tasks
# that prevent the system from sleeping, in particular those that
# poll files or incorrectly poll() them, and ones that play ping-pong
# with each other.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. This can be found
# at <http://www.gnu.org/licenses/>.
use strict qw(refs vars subs);
use warnings;
my $verbose=1;
my $all=0; # show all frequencies (etc.?) even if data is 0
my $incompat=0; # more accuracy then maemo/meego's powertop means different results
# Need to select which timer to use. Time::HiRes may not be available
my ($xtime,$calibrate);
eval { require Time::HiRes; };
if(!$@) { $xtime = \&Time::HiRes::time; }
else {
print STDERR "WARNING: Only low accuracy timing available.\n";
sub xtime {
open(S, "</proc/stat");
<S>; $_=<S>;
close(S);
my @a=split(/\s+/);
return ($a[1]+$a[2]+$a[3]+$a[4]+$a[5]+$a[6]+$a[7])/100;
}
$xtime=\&xtime;
$calibrate=1;
}
# Not every check is appropriate, depending on platform
my ($do_cpuidle, $do_cpufreq, $do_interrupts, $do_timerstats, $do_ctxtsw)=(1,1,1,1,1);
sub usage()
{
print<<HELP
ZzzTop: show wakeup reasons, and other PM-related CPU info
Usage:
zzztop [-h] [-s=<nnn>] [-t=<nnn>] [-a]
-h this help text
-s=<nnn> sleep for <nnn> seconds before collecting data
-t=<nnn> collect data for <nnn> seconds
-a for some data gathered (cpufreq), show even 0 records
HELP
}
my ($sleep,$time)=(10,30);
while($_=shift(@ARGV)) {
if(m/-s=(\d+)/) { $sleep=int($1); }
elsif(m/-t=(\d+)/) { $time=int($1); }
elsif(m/-a/) { $all=1; }
elsif(m/-h/) { usage(); exit; }
else { unshift(@ARGV, $_); last; }
}
my $mtime;
# gmtime(); # flush any one-time-only date prep now before the critical loop
my $cpudir='/sys/devices/system/cpu';
sub headstrip($)
{
open(F, "<", $_[0]) or die("failed to read $_[0]");
$_=<F>;
close(F);
chomp if($_);
$_;
}
# BEGIN cpu
sub get_cpu_range()
{
my $c=-1;
my @cpus=glob("$cpudir/cpu[0-9]");
foreach my $cpuname (@cpus) {
my ($cpu)=($cpuname=~m/(\d+)$/);
if($cpu>$c) { $c=$cpu; }
}
print("Detected ".($c+1)." cpus\n")
if($verbose);
$c;
}
my $maxcpu=0;
$maxcpu = get_cpu_range();
if($maxcpu<0) {
$do_cpuidle=0;
print STDERR "All cpu-specific data gathering disabled - no $cpudir/cpu*\n";
}
# END cpu
# BEGIN cpuidle
sub get_cpuidle_ranges($)
{
my $ret=$_[0];
my $s=-1;
foreach my $cpu (0..$maxcpu) {
my @states=glob("$cpudir/cpu$cpu/cpuidle/state[0-9]*");
my $t=-1;
foreach my $state (@states) {
my ($statenum)=($state =~ m/(\d+)$/);
if($statenum>$t) { $t=$statenum; }
}
if($t>=0) { $ret->[$cpu]=$t; }
if($t>$s) { $s=$t; }
}
print("Detected ".($s+1)." cpuidle states (@$ret)\n")
if($verbose);
$s;
}
my @maxstate;
my $maxstate = get_cpuidle_ranges(\@maxstate);
if($#maxstate<0) {
$do_cpuidle=0;
print STDERR "cpuidle disabled - no $cpudir/cpu*/cpuidle trees\n";
print STDERR " enable CPU_IDLE in kernel config\n"
if($verbose);
}
sub get_cpuidle_data() {
my @ret=();
foreach my $cpu (0..$maxcpu) {
$ret[$cpu]=[];
foreach my $state (0..$maxstate[$cpu]) {
my $time=headstrip("$cpudir/cpu$cpu/cpuidle/state$state/time");
my $usage=headstrip("$cpudir/cpu$cpu/cpuidle/state$state/usage");
$ret[$cpu]->[$state]=[$time,$usage];
}
}
@ret;
}
sub diff_cpuidle($$)
{
my ($pre, $post)=@_;
print("C-state Information\n");
print("===================\n");
my @totalidle=();
my $usagemax=0;
foreach my $cpu (0..$maxcpu) {
foreach my $state (0..$maxstate[$cpu]) {
my $dt = $post->[$cpu][$state][0] - $pre->[$cpu][$state][0];
my $du = $post->[$cpu][$state][1] - $pre->[$cpu][$state][1];
$totalidle[$cpu] += $dt;
my $residence = $du ? int($dt/$du) : 0;
if($residence > $usagemax) { $usagemax=$residence; }
}
}
my ($usagescale, $usageletter)=(1,'u');
if($usagemax>99999) { $usagescale=1000; $usageletter='m'; }
my ($h1,$h2,$h3);
$h1=" |";
$h2=" C# |";
$h3="----+";
foreach my $cpu (0..$maxcpu) {
$h1.=" CPU#$cpu |";
$h2.=" time | avg/${usageletter}s |";
$h3.="--------+--------+";
}
print("$h1\n$h2\n$h3\n");
printf(" C%u |", 0); # active is the fake state C0
foreach my $cpu (0..$maxcpu) {
printf(" %5.1f%% | |", 100-$totalidle[$cpu]/($mtime*10000));
}
print("\n");
foreach my $state (0..$maxstate) {
printf(" C%u |", $state+1);
foreach my $cpu (0..$maxcpu) {
if($state<=$maxstate[$cpu]) {
my $dt = $post->[$cpu][$state][0] - $pre->[$cpu][$state][0];
my $du = $post->[$cpu][$state][1] - $pre->[$cpu][$state][1];
# times in us, so divide by 1000000, but want % so use 10000.
# usage is number of transition
printf(" %5.1f%% | % 5s |",
$dt/($mtime*10000),
$du ? int($dt/$du/$usagescale) : "");
} else {
printf(" | |");
}
}
print("\n");
}
#With the fake C0 record for active, there's no need for the idle sum too
#print("Idle\t|");
#foreach my $cpu (0..$maxcpu) {
# printf(" %4.1f%%\t|\t|", $totalidle[$cpu]/($mtime*10000));
#}
#print("\n");
print("\n");
}
# END cpuidle
# BEGIN cpufreq
sub get_cpufreq_ranges()
{
return -r "$cpudir/cpu0/cpufreq/stats/time_in_state" ? 0 : -1;
}
if(get_cpufreq_ranges()<0) {
$do_cpufreq = 0;
print STDERR "cpufreq disabled - no $cpudir/cpu*/cpufreq/stats/time_in_state\n";
print STDERR " enable CPU_FREQ_STAT in kernel config\n"
if($verbose);
}
sub get_cpufreq_data() {
my @ret=();
foreach my $cpu (0..$maxcpu) {
$ret[$cpu]={};
open(F, "<$cpudir/cpu$cpu/cpufreq/stats/time_in_state") or die("cpufreq: 'read $cpudir/cpu$cpu/cpufreq/stats/time_in_state' $@");
while(<F>) {
if(m/(\d+)\s+(\d+)/) { $ret[$cpu]->{$1} = $2; }
else { die("WTF is this doing in cpufreq: $_"); }
}
close(F);
# print("cpu$cpu -> ", join(" ",keys(%{$ret[$cpu]})), "\n");
}
@ret;
}
sub diff_cpufreq($$)
{
my ($pre, $post)=(@_);
my %okfreq=();
print("CPUfreq statistics\n");
print("==================\n");
my @totalticks=();
my @freqs = sort { $a<=>$b } keys(%{$pre->[0]});
foreach my $cpu (0..$maxcpu) {
$totalticks[$cpu]=0;
foreach my $freq (@freqs) {
my $dt = $post->[$cpu]->{$freq} - $pre->[$cpu]->{$freq};
$totalticks[$cpu] += $dt;
if($dt) { $okfreq{$freq}++; }
}
}
my $h1="Frequency |";
my $h2="----------+";
foreach my $cpu (0..$maxcpu) {
$h1.=" CPU#$cpu |";
$h2.="--------+";
}
print("$h1\n$h2\n");
foreach my $freq (@freqs) {
if(!$all and !$okfreq{$freq}) { next; }
printf(" %4u MHz |", int($freq/1000));
foreach my $cpu (0..$maxcpu) {
my $dt = $post->[$cpu]->{$freq} - $pre->[$cpu]->{$freq};
printf(" %5.1f%% |", $dt*100/$totalticks[$cpu]);
}
print("\n");
}
print("\n");
}
# END cpufreq
# BEGIN interrupts
sub get_interrupt_names()
{
open(I, "</proc/interrupts") or return undef;
my @ret=();
while(<I>) {
if(m/^\s+CPU\d/) { next; }
elsif(m/\s*(\w+):\s+\d/) { push(@ret, $1); }
else { print("interrupts: what's: $_"); }
}
close(I);
@ret;
}
my @interrupt_names=get_interrupt_names();
if(scalar(@interrupt_names)<=0) {
$do_interrupts = 0;
print STDERR "interrupts disabled - no /proc/interrupts\n";
}
sub get_interrupt_data() {
my @ret=();
open(I, "</proc/interrupts");
while(<I>) {
if(m/^\s+CPU\d/) {
foreach my $cpu (0..$maxcpu+1) { $ret[$cpu]={}; }
next;
} elsif(s/\s*([\w]+):\s+//) {
my $int=$1;
foreach my $cpu (0..$maxcpu) {
s/(\d+)\s+//;
if($maxcpu>0 && !length($_)) { last; }
$ret[$cpu]->{$int}=$1;
}
chomp;
$ret[$maxcpu+1]->{$int} = $_;
}
else { print("interrupts: what's: $_"); }
}
close(I);
@ret;
}
sub diff_interrupts($$)
{
my ($pre, $post)=(@_);
my %okirq=();
my @output=();
my @activity=();
my $total=0;
foreach my $int (@interrupt_names) {
if($maxcpu>0 and !exists($pre->[1]->{$int})) { next; } # ERR or MIS, cpu-less
my $line=sprintf("%4s |", $int);
my $doit=0;
foreach my $cpu (0..$maxcpu) {
my $dt = $post->[$cpu]->{$int} - $pre->[$cpu]->{$int};
$line.=sprintf(" % 5u |", $dt);
$doit+=$dt;
}
if($doit) {
push(@output, "$line $pre->[$maxcpu+1]->{$int}\n");
push(@activity, $doit);
$total+=$doit;
}
}
print("Interrupt statistics\n");
print("====================\n");
my $h1=" INT |";
my $h2="-----+";
foreach my $cpu (0..$maxcpu) {
$h1.=" CPU#$cpu |";
$h2.="-------+";
}
print("$h1\n$h2\n");
my @indices = sort { $activity[$b]<=>$activity[$a]; } (0..$#activity);
foreach(@indices) { print($output[$_]); }
printf("Summary: %3.1f interrupts/s total\n", $total/$mtime);
print("\n");
}
# END interrupts
# BEGIN timerstats
sub get_timerstats()
{
open(T, ">/proc/timer_stats") or return -1;
print T "0\n";
close(T);
0;
}
if(get_timerstats()<0) {
$do_timerstats = 0;
print STDERR "timerstats disabled - no writeable /proc/timer_stats\n";
if($> != 0) { print STDERR " you need to be root!\n"; }
elsif($verbose) {
print STDERR " enable TIMER_STATS in kernel config\n";
}
}
sub get_timerstats_data($) # 1 then 0
{
my $stop=$_[0];
open(T, ">/proc/timer_stats") or die("timerstats: open() failed: $@");
print T (($stop?1:0),"\n");
close(T);
}
sub diff_timerstats()
{
my $ok=1;
my @output=();
my @activity=();
open(T, "</proc/timer_stats") or die("timerstats: open() failed: $@");
while(<T>) {
if(m/Timer Stats Version/) { next; }
if(m/Sample period: ([\d.]+)\s*s/) { if($1 eq "0.000") { $ok=0; last; } }
if(m/(\d+) total events/) { if($1 eq "0") { $ok=0; last; } }
if(m/\s+(\d+)(D?),\s+(\d+)\s(\S+)\s+(.*)$/) {
push(@output, sprintf(" % 5s | % 8s%1s| % 15s | %s\n",
$3, $1, $2, $4, $5));
push(@activity, $1+($3*10e-9)); # decimals keep tasks together ;-)
}
}
close(T);
if(!$ok) {
print("Timerstats was unable to gather any data from /proc/timer_stats\n\n");
return;
}
my @indices = sort { $activity[$b]<=>$activity[$a]; } (0..$#activity);
print("Timer statistics\n");
print("================\n");
print(" PID | Activity | task's comm | function\n");
print("-------+----------+-----------------+---------\n");
foreach(@indices) { print($output[$_]); }
print("\n");
}
# END timerstats
my %taskinfo=();
my $taskinfodone=0;
sub get_task_info($)
{
my $cmd=headstrip("/proc/$_[0]/cmdline");
if($cmd) {
$cmd=~tr/\0/ /;
}
$cmd;
}
sub get_tasks_info($) {
if(!$_[0] and $taskinfodone) { return; }
for my $p (glob("/proc/[0-9]*")) {
my ($pid)=($p=~m@/proc/(\d+)@);
$taskinfo{$pid}=get_task_info($pid);
}
}
# BEGIN context switch stats
sub get_ctxtsw_init()
{
get_tasks_info(0);
0;
}
if(get_ctxtsw_init() < 0) {
$do_ctxtsw = 0;
print STDERR "context_switches disabled - this is unexpected\n";
}
sub get_ctxtsw_data()
{
my %ret=();
for my $p (glob("/proc/[0-9]*")) {
open(T, "$p/status") or next;
my ($pid)=($p=~m@/proc/(\d+)@);
my @v=();
my $luserspace=0;
my ($name)=(<T>=~/Name:\s+(\S+)/);
while(<T>) {
if(m/^(Vm|State:\s+Z)/) { $luserspace=1; }
elsif(m/(\S*)voluntary_ctxt_switches:\s+(\d+)/) {
$v[length($1)?1:0] = $2;
}
}
if(!defined($taskinfo{$pid})) {
$taskinfo{$pid} = $luserspace ? get_task_info($pid) : "<$name>";
}
close(T);
$ret{$pid}=\@v;
}
%ret;
}
sub diff_ctxtsw($$)
{
my ($pre, $post)=@_;
print("Context switches per task\n",
"=========================\n");
print(" PID | vol'try | non-vol | Cmdline\n",
"-------+---------+---------+--------\n");
my @postpids=sort { $b<=>$a; } (keys(%$post));
foreach my $p (@postpids) {
my $prevals = $pre->{$p} || [0,0];
my $dv=$post->{$p}->[0] - $prevals->[0];
my $dn=$post->{$p}->[1] - $prevals->[1];
printf(" % 5u | % 7u | % 7u | %s\n", $p, $dv, $dn, $taskinfo{$p})
if($dv || $dn);
}
print("\n");
}
# END context switch stats
if(!$do_cpuidle && !$do_cpufreq && !$do_interrupts && !$do_timerstats && !$do_ctxtsw) {
print "No statistics can be gathered, aborting\n";
exit;
}
# Timing preparations
print("Sleeping for $sleep seconds before collecting data for $time seconds\n");
my ($timepre1, $timepre2, $timepost1, $timepost2);
my $timecali=&$xtime if($calibrate);
sleep($sleep);
$timepre1=&$xtime;
if($sleep and $calibrate) {
my $measured=$timepre1-$timecali;
my $ratio=$measured/$sleep;
if($ratio>1.01 or $ratio<0.99) { print("WARNING: No accurate timer found, relying on sleep itself.\n"); }
else { $calibrate=0; } # we trust this measure
}
# Now actually gather the data
my %ctxtsw_pre=get_ctxtsw_data() if($do_ctxtsw);
my @cpuidle_pre=get_cpuidle_data() if($do_cpuidle);
my @cpufreq_pre=get_cpufreq_data() if($do_cpufreq);
my @interrupts_pre=get_interrupt_data() if($do_interrupts);
get_timerstats_data(1) if($do_timerstats);
$timepre2=&$xtime;
sleep($time);
$timepost1=&$xtime;
my %ctxtsw_post=get_ctxtsw_data() if($do_ctxtsw);
my @cpuidle_post=get_cpuidle_data() if($do_cpuidle);
my @cpufreq_post=get_cpufreq_data() if($do_cpufreq);
my @interrupts_post=get_interrupt_data() if($do_interrupts);
get_timerstats_data(0) if($do_timerstats);
$timepost2=&$xtime;
# @$mtime is the measurement time, which will probably be
# longer than the time we requested.
if($calibrate) {
$mtime = $time;
printf("Presumably slept for %1.3fs\n", $mtime);
} else {
$mtime =($timepost1-$timepre2); # how long the sleep took
$mtime += (($timepre2-$timepre1)+($timepost2-$timepost1))/2
if($incompat); # plus the overhead of reading the values
printf("Actually slept for %1.3fs\n", $mtime);
}
diff_cpuidle(\@cpuidle_pre, \@cpuidle_post) if($do_cpuidle);
diff_cpufreq(\@cpufreq_pre, \@cpufreq_post) if($do_cpufreq);
diff_interrupts(\@interrupts_pre, \@interrupts_post) if($do_interrupts);
diff_timerstats() if($do_timerstats);
diff_ctxtsw(\%ctxtsw_pre, \%ctxtsw_post) if($do_ctxtsw);
|
|
|
nextcloud contacts are duplicating |
Posted by: Uturn - 10-20-2021, 08:35 AM - Forum: Manjaro on PinePhone
- Replies (1)
|
 |
with KDE plasma mobile, i happened to add the same nextcloud account twice. So, my address book showed every contact twice. Now I deleted one of these identical nextcloud accounts. The duplicated contacts remained. Next I deleted my other nextcloud account.
Zero account left, but all contacts remained twice in phone book app. After a restart, I added my Nextcloud accoung again: Now I have three copies of each contact.
Sync with nextcloud does not seem to work as it should.
How can I clear the local contacts data so phone book is empty again?
So I could set my cloud syncing from scratch?
Is it maybe better to set up vdirsyncer for cloud syncing?
|
|
|
service: command not found |
Posted by: jojuma - 10-20-2021, 04:49 AM - Forum: Manjaro on PinePhone
- Replies (2)
|
 |
Hi,
I am currently trying to make a ssh connection work. I placed the public key and tried to connect. Since that doesn't work yet I tried to check the status of ssh like
Code: sudo service ssh status
and I get
Code: sudo: service: command not found
ssh itself seems to be ok, since I get options offered when only typing ssh. How do I get 'service' to work? I searched the net, but I don't find a clear explanation, especially not for the Pinephone which I absolutely don't want to mess up.
Currently I'm on Pinephone KDE (Manjaro/Plasma Mobile):
KDE Plasma Version: 5.22.5
KDE Frameworks Version: 5.86.0
Qt Version: 5.15.2
Kernel Version: 5.14.10-1-MANJARO-ARM
Thank you!
|
|
|
Music stops playing when screen goes off and session gets suspended |
Posted by: jojuma - 10-20-2021, 03:41 AM - Forum: Manjaro on PinePhone
- Replies (2)
|
 |
Hi,
so at least I suspect what the thread subject says. How can I keep listening to music while screen is off for a longer time?
I found, that adding a user to group 'music' should do the trick like
Code: sudo adduser <username> audio
but what I get is:
Code: sudo: adduser: command not found
Currently I'm on Pinephone KDE (Manjaro/Plasma Mobile):
KDE Plasma Version: 5.22.5
KDE Frameworks Version: 5.86.0
Qt Version: 5.15.2
Kernel Version: 5.14.10-1-MANJARO-ARM
Thanks for any advice!
EDIT: That DID NOT do the trick. As soon as the sesssion is suspended, the music stops. Even though I set 'Suspend Session' to 'never'.
So the questiom remains open: How to keep music playing while screen is off?
|
|
|
Bluetooth hands free |
Posted by: AndyM - 10-19-2021, 12:25 PM - Forum: General Discussion on PinePhone
- Replies (2)
|
 |
I can connect my PP via bluetooth to my in-car hands free, but the state of the signal and battery are not reported, so the hands free system believes that there is not signal/power. Am I missing some softwre to make this work, or do U have to wait for further developments?
Arch linux: Linux pinephone 5.14.13-1-danctnix
Pinephone Version 1.2a
|
|
|
Bluetooth hands free |
Posted by: AndyM - 10-19-2021, 08:39 AM - Forum: General Discussion on PinePhone
- Replies (4)
|
 |
I can connect my PP via bluetooth to my in-car hands free, but the state of the signal and battery are not reported, so the hands free system believes that there is not signal/power. Am I missing some softwre to make this work, or do U have to wait for further developments?
Arch linux: Linux pinephone 5.14.13-1-danctnix
Pinephone Version 1.2a
|
|
|
Red LED when trying to boot from SD card. Need advice. |
Posted by: サーバント - 10-18-2021, 04:37 PM - Forum: PinePhone Hardware
- Replies (5)
|
 |
I am now unable to boot from micro SD card. The only thing I have done that would be considered sensitive was flashing the open source firmware for the modem. That was the last major thing I did on my Pinephone running mobian. I only noticed it wasn't working last night b/c I flashed the SXMO image to a micro SD card. I was so excited because it seems like the best OS for me on the pinephone, just learned about it. It was a bummer to get the red led indicator.
I thought I did something wrong or my SD card was bad, so I bought a pack of 3 extra 64gb micro sd cards. All the same issue, when I press the power button with a SD installed the LED turns red and does nothing. I have done some research online but could not find a solution. I read that red LED means it detects the SD but there is a issue. I have tried 4 separate SD cards, I am using balena etcher to flash the images btw. I have used 2 different computers just to be safe. I did format and delete all the partitions from the sd card before flashing the new image. I did put in a empty sd card with nothing on it to see what would happen. Same red led.
To be clear it was working before, I have tested multiple OS's on the SD card previously. Manjaro Phosh, Mobian and I even used the SD card to make the pinephone's emmc flashable to install Mobian on the emmc. Only after flashing the open source modem firmware did I discover this issue. I only mention updating the firmware b/c that was the last major thing I did. I am not assuming it is the cause of the issue. I used GNU/Linux on and off for about almost 15 years. But I will be honest I still don't know much. So help a brother out. Thanks in advance.
TLDR: what steps can I take to troubleshoot my issue of not being able to boot from SD card?
|
|
|
Sync Frequency with Nextcloud :huh: :heart: |
Posted by: food - 10-18-2021, 11:47 AM - Forum: Mobian on PinePhone
- Replies (1)
|
 |
Hi Mobian-Pinephone team,
I'm using Pinephone-Mobian as my main and only driver for my business with Nextcloud as my only online account.
How do I manually enter a sync of information from the terminal?
Are there modifiers specifying Phone-to-cloud movement and/or cloud-to-phone movement?
If there isn't a way to do this manually, is there a helpful snap package or container that does it for me?
wellwishes,
food
|
|
|
NetBSD on PinePhone/PinePhone Pro? |
Posted by: cerno - 10-18-2021, 09:28 AM - Forum: PinePhone Software
- Replies (2)
|
 |
Is someone considering porting of NetBSD to the PinePhone (or, preferrably, PinePhone Pro)? I am willing to sponsor a PPP/keyboard pair to interested developer (or two).
(Sorry for posting to general-software forum; moderators, feel free to move elsewhere/breakout the thread.)
|
|
|
|