is it just me, or when you "adb shell" into the device and then use a program that uses the arrow keys everything goes berserk?
it seems like it's overlaying the command history into the on-screen buffer and all future interactions are corrupted beyond repair.
for example, run vi and use arrow keys to navigate around (yes, i know there are other methods for this, just using this to illustrate) and it pulls info from some sort of history buffer on to the screen.
another example is the ash shell. up and down arrows behave nicely at first allowing you to scroll through your command history. but, it degrades fairly rapidly into being unusable
this does not seem to be an issue using scroll ball in terminal on the device.
I can't find anything in the Android Issues Page.
I've reproduced this in multiple builds on multiple OS's on multiple machines (but I've only got one G1, hence this thread)
Does anyone have any insight?
What OS? Mine behaves this way too, and I think the root problem is the Windows command prompt. Read a comment somewhere on here that makes sense - something along the lines of cmd.exe not properly interpretting ANSI control codes? Need to hit up Google, maybe there's an alternative command shell that would solve this for Windows users.
EDIT: Ok, really need to work on reading comprehension - you tried multiple OSes? I was all set to blame MS. Anyway, I tested in Cygwin, Command2, Command2 wrapped around bash.exe .. No luck. Problem has to be in ADB itself somewhere, either the daemon on the phone or in all the clients.
Saiboogu said:
What OS? Mine behaves this way too, and I think the root problem is the Windows command prompt. Read a comment somewhere on here that makes sense - something along the lines of cmd.exe not properly interpretting ANSI control codes? Need to hit up Google, maybe there's an alternative command shell that would solve this for Windows users.
Click to expand...
Click to collapse
Thx for the reply.
I use a Mac mostly, but have similar response in Linux and Windows.
I've tried Terminal.app as well as iTerm on the Mac.
I tried cmd.exe, powershell, & cygwin / bash in Windows.
I agree it almost has to do have something to do with the way the adb daemon handles ANSI codes.
Maybe this will help...
Hi All,
I don't reckon there isn't an actual problem.
The "DOS" console is not a terminal program and thus doesn't behave proper, and the DOS telnet program is just as bad!
In linux, the console is a terminal program, but is also very generic.
The adb shell is not a very good telnet server either in terms of terminal handling; which all really boils down to the sh being to limited as a login shell.
The following may help a little.
Have PuTTY or the like handy.
For windows, copy paste the following or something like it into a bat file (dlink.bat I called it):
The important bit is the forwarding...
Code:
@echo off
:init
::REM //-----------------------------------------------------------------------
set prog=%~f0&&REM This
set progDir=%~dp0&&REM This location
set workdir=%cd%&&REM Current locataion
set ADB=%progDir%adb
echo --Droid Link--
echo current settings:
echo -----------------
echo prog=%prog%
echo progDir=%progDir%
echo workdir=%workdir%
echo -----------------
::REM //-----------------------------------------------------------------------
::REM //ensure a clean house
%ADB% kill-server&&echo adb server clean: Ok.||echo adb server clean: Problem...
::REM //start fresh server instance, use its own shell as it will not detach from the shell until it ends elsewise due to it running in daemon mode
%SystemRoot%\system32\cmd.exe /e:on/v:on/f:on /c "%ADB% root>nul:"
::REM //get id of the Android (will need to be adjusted for more than one)
for /f %%a in ('"%ADB% devices|find "HT""') do set adev=%%a
::REM //see if we found our device
if .%adev%.==.. (
echo Android not detected...
goto :done
) else (
echo Android detected as:%adev%
)
::REM /if
set DROID=%ADB% -s %adev%
::REM //-----------------------------------------------------------------------
:begin
::REM //-----------------------------------------------------------------------
::REM //forward telnet port
%DROID% forward tcp:18023 tcp:23
::REM //forward ssh port
%DROID% forward tcp:18022 tcp:22
echo This terminal is now held by --Droid Link--
echo You can now connect to Android:%adev% via telnet host:127.0.0.1 port:18023
echo And if you start a ssh server...
echo You can connect to Android:%adev% via ssh host:127.0.0.1 port:18022
echo For best results, use a program like PuTTY or something (dos telnet is lacking).
%DROID% shell telnetd
echo --Droid Link: Closed---
::REM //-----------------------------------------------------------------------
:done
::REM //-----------------------------------------------------------------------
%ADB% kill-server&&echo adb server off-line.||echo adb server dropped: off-line.
::REM //cleanup
set DROID=
set ADB=
set adev=
::REM //-----------------------------------------------------------------------
:xit
echo End of line.
::REM //-----------------------------------------------------------------------
For Mac, I'm afraid I rely on my linux syntax and pray it works the same in OSX:
adb -s {device ID} forward tcp:18023 tcp:23
note the adb -d forward tcp:18023 tcp:23 may do the trick also.
I use PuTTY and have a profile called Android-Telnet, which can be called from the console as putty.exe -load Android-Telnet
PuTTY may or may not be the end-all, be-all of terminal programs, but I like it, it works, and is multiplatform.
Hope that helps.
tyvm, Darkstrumn. that worked great! Can't believe i didn't think to try this as a workaround.
all i did (on OSX Leopard):
adb shell telnetd &
adb forward tcp:9999 tcp:23
telnet localhost 9999
now, to get working on compiling dropbear 0.52 and / or patching adb *eek*
i guess a related question becomes, is there any way to change ash to the default login shell?
alapapa said:
tyvm, Darkstrumn. that worked great! Can't believe i didn't think to try this as a workaround.
all i did (on OSX Leopard):
adb shell telnetd &
adb forward tcp:9999 tcp:23
telnet localhost 9999
now, to get working on compiling dropbear 0.52 and / or patching adb *eek*
i guess a related question becomes, is there any way to change ash to the default login shell?
Click to expand...
Click to collapse
Just a note: The windows version of this is just as simple as those 3 commands, the complexity of the script is simply allowing the script to lock-on to the device by id; my actual scripts enumerate the devices including the emulator into the %adevN% variables where N is 0-X. %adev0% will always be the first instance of the emulator found and %adev1% will always be the first instance of a true device found. I simple made it light and posted it. I think it only matters if you are using the emulator and have a live device connected and what to work with both.
Let me know if the enumeration script would be handy and I can post it also.
I haven't gone the route of dropbear just yet, but I'm interested in using ssh vs telnet.
As far as ash goes, I reckon the trick is to setup a chroot to use it as the console...maybe override the console service defined in init.rc.
Note I think ash is expecting the passwd file to exist and have meaning, so that may need to be setup to have ash behave a little better in the Android environment.
Thanks! This worked a treat for me.
I was having trouble with lynx and ansi chars within an adb session, the forward made my day .
Actually I got rid of the complex batch above, I just set up two small batch files:
myadbshell1.bat
@echo 1
@adb forward tcp:18022 tcp:22
@adb forward tcp:18023 tcp:23
@adb shell telnetd
@exit
myadbshell2.bat
@echo 2
@putty.exe telnet://127.0.0.1:18023
@exit
Run the first, then the second.
Do your story in putty, when exit everything will close.
Why echo 1 and 2? Because withouy I was getting the two batchs hanging, dunno why. :-?
Everything on windows environment.
In windows I created a .bat file called adb.bat, where c:/adb/ is where I installed the SDK:
Code:
c:/adb/tools/adb remount
c:/adb/tools/adb forward tcp:9999 tcp:23
c:/adb/tools/adb shell telnetd
I run this file as Administrator, and then I can telnet into localhost:9999 with putty. Works great!
Putty on Windows
In windows I created a .bat file called adb.bat, where c:/adb/ is where I installed the SDK:
Code:
c:/adb/tools/adb remount
c:/adb/tools/adb forward tcp:9999 tcp:23
c:/adb/tools/adb shell telnetd
I run this file as Administrator, and then I can telnet into localhost:9999 with putty. Works great!
I found this website: http://www.androidkit.com/steps-to-install-and-uninstall-apk-file-on-android-g1-device
Section 3: Uninstalling the .apk file from the G1 device before installing the same .apk again.
1. In the G1 Phone, Go to Applications Menu ->Settings->Manage Applications.
2. Select the application which you want to Uninistall, and click on the ‘Uninstall’ button.
3. Follow steps 6 and 7 of Section 1.
Section 4: Uninstalling the .apk file (from the Device or Emulator) using adb shell.
There is an adb uninstall command which always shows Failure!!!
Using adb shell :
Important: The device has to be unplugged from USB if you are trying to uninstall from the emulator, else emulator should not be open and device needs to be plugged in the USB of the PC if you are trying to uninstall from the G1 Device. If either of them are not connected the adb shell command will not work
Go to the shell and making sure adb is in PATH:
Go to shell (from cmd->adb shell or directly through a terminal)
#
#cd data
#cd app
#cd ls
You will get a list of installed application with the complete package name of the package containing the main activity. e.g com.company.product.apk
#rm com.company.product.apk
#cd ls
You will not find the application – you just removed it!.
Click to expand...
Click to collapse
So, when I type:
Cd Data
Cd App
Cd ls
in my command prompt I get:
cd: can't cd to ls
$
as a prompt feedback.
----
I found an .APK to enable my headphone adapter working ( see this thread: http://forum.xda-developers.com/showthread.php?t=575534 ) via this board ( see this thread: http://forum.xda-developers.com/showthread.php?t=511704 ), and if it doesn't work, I'm taking precautions on how to uninstall it.
Anyone know why it's doing this?
Thanks people.
Minifig said:
I found this website: http://www.androidkit.com/steps-to-install-and-uninstall-apk-file-on-android-g1-device
So, when I type:
Cd Data
Cd App
Cd ls
in my command prompt I get:
cd: can't cd to ls
$
as a prompt feedback.
----
I found an .APK to enable my headphone adapter working ( see this thread: http://forum.xda-developers.com/showthread.php?t=575534 ) via this board ( see this thread: http://forum.xda-developers.com/showthread.php?t=511704 ), and if it doesn't work, I'm taking precautions on how to uninstall it.
Anyone know why it's doing this?
Thanks people.
Click to expand...
Click to collapse
the command should be "ls" not "cd ls"
also, if you know the package name you could use adb: adb uninstall <package_name>
and if you're just trying to install an app that you already have (such as updating the app) you could use adb and not have to uninstall first with: adb install -r app_name.apk
OK.
I'm just going to make sure before I even install this thing:
http://code.google.com/p/toggleheadset/downloads/detail?name=ToggleHeadset.apk&can=2&q=
This is just a widget, so it won't replace anything in my phone..
If I can't find it on the shell command, I'll be able to uninstall it via the phone like the Date widget I have as well?
Right?
I'm running Dirty Unicorns ROM. It has an option for custom carrier label. When I run shell for "settings list system" the line custom_carrier_label=Verizon Wireless shows. I want to hide all notifications from the lock screen and have my carrier label show %SMS (variable for unread SMS) Message if %SMS>0. My code settings put system custom_carrier_label=%SMS Message in run shell doesn't work. If this is possible what am I doing wrong?
Sent from my Nexus 6P using Tapatalk
You probably need to restart systemui for the change to take effect.
To do that, run this shell command as root:
Code:
pkill -l TERM -f com.android.systemui
If your screen is on when this command runs, whatever you are doing well get interrupted by your lock screen.
To avoid being interrupted, add this action before the shell command:
Code:
Wait Until
%SCREEN ~ off
Also, your 'settings put ...' shell command needs to be run as root.
Depending on your ROM broadcasting
Code:
android.intent.action.CUSTOM_CARRIER_LABEL
might also work.
GNU Screen for Android
Here is a module to add the screen command to android shell system wide system-lessly. I sourced the necessary binaries and libs from Termux and adapted to run outside of Termux's sandboxed environment using a wrapper script. From testing it works great on my OG pixel running pie with SElinux enabled.
Useage:
Code:
.┌[09:18 AM] [u0_a224] [/]
└─ $ screen -h
Use: /sbin/.magisk/img/com.geofferey.screen/bin/screen [-opts] [cmd [args]] or: /sbin/.magisk/img/com.geofferey.screen/bin/screen -r [host.tty] Options: -a Force all capabilities into each window's termcap. -A -[r|R] Adapt all windows to the new display width & height. -c file Read configuration file instead of '.screenrc'. -d (-r) Detach the elsewhere running screen (and reattach here). -dmS name Start as daemon: Screen session in detached mode. -D (-r) Detach and logout remote (and reattach here). -D -RR Do whatever is needed to get a screen session. -e xy Change command characters. -f Flow control on, -fn = off, -fa = auto. -h lines Set the size of the scrollback history buffer. -i Interrupt output sooner when flow control is on. -ls [match] or -list Do nothing, just list our SockDir [on possible matches]. -L Turn on output logging.
-Logfile file Set logfile name.
-m ignore $STY variable, do create a new screen session.
-O Choose optimal output rather than exact vt100 emulation.
-p window Preselect the named window if it exists.
-q Quiet startup. Exits with non-zero return code if unsuccessful.
-Q Commands will send the response to the stdout of the querying process.
-r [session] Reattach to a detached screen process.
-R Reattach if possible, otherwise start a new session.
-s shell Shell to execute rather than $SHELL.
-S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title Set title. (window's name).
-T term Use term as $TERM for windows, rather than "screen".
-U Tell screen to use UTF-8 encoding.
-v Print "Screen version 4.06.02 (GNU) 23-Oct-17".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x Attach to a not detached screen. (Multi display mode).
-X Execute <cmd> as a screen command in the specified session.
┌[09:18 AM] [u0_a224] [/]
└─ $
CHANGELOG:
v1a - Initial Release
v1.1a - Updates to wrapper script & switch to arm bins/libs
v1.2a - Updates to config.sh & screen-setup.sh
v1.2b - Fully system-less, no more mount binding because it's brutal & un-necessary.
*RESERVED*
reserved
Hi, i try to exec "su ls /data/data" from java code. But can see only too folder
com.myproject.test and com.google.android.gms
su -v # 24.3:MAGISKSU
su whoiam #root
If i exec this command in termux i will get full list of applications. What is problem and how can i fix that?
your use of "su" is bad ... to launch a command as root from within a program, you should use the "-c" switch (as mentionned in man page). every android app is sandboxed, so you see the content of your application's directory (/data/data/<APP name>).
"man su" to read more (on android, or on linux to read with a large screen).
"su whoami" launch whoami and I suppose you're using termux as root