ubuntu提升使用体验篇

Gnome自用插件

KDE配置相关

安装GSConnect插件后与其他设备配对

  • 远程锁定/解锁屏幕

    设置方式:Mobile Settings -> Connected Device -> Commands 增加以下两项

    1
    2
    /usr/bin/gnome-screensaver-command -l //锁定屏幕
    /usr/bin/gnome-screensaver-command -d //解锁屏幕

系统快捷键

设置方式:Settings -> Keyboard -> View and Customize Shortcuts -> Custom Shortcuts

  • 快速打开scrcpy

    1. 添加打开第一台设备快捷键

      Name: Scrcpy#1

      Command: bash -c "scrcpy -s $(adb devices | grep -sw "device" | awk 'NR==1 {print $1}')"

      Shortcut: Ctrl + 1

    2. 添加打开第二台设备快捷键

      Name: Scrcpy#2

      Command: bash -c "scrcpy -s $(adb devices | grep -sw "device" | awk 'NR==2 {print $1}')"

      Shortcut: Ctrl + 2

  • 将已打开的terminal显示在前台(避免打开过多的窗口导致桌面混乱)

    1. 执行sudo apt install xdotool安装软件包

    2. 将以下脚本保存到~/bin/call-recent-terminal下并追加执行可执行权限

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      #!/bin/bash
      if ! which xdotool > /dev/null 2>&1; then
      echo "You need to install xdotool package first."
      echo "sudo apt-get install xdotool"
      exit 1
      fi
      if [[ $(pgrep -x x-terminal-emul) ]]; then
      xdotool windowactivate `xdotool search --pid $(pgrep -x x-terminal-emul) | tail -1`
      else
      x-terminal-emulator
      fi
    3. 添加自定义快捷键

      Name: Launch recent terminal

      Command: ~/bin/call-recent-terminal

      Shortcut:Ctrl + Alt + R

  • 交互式截屏(类似于微信)

    1. 安装软件包sudo apt install flameshot

    2. 添加自定义快捷键

      Name: Take a screenshot interactively plus

      Command: /usr/bin/flameshot gui

      Shortcut:Shift + Ctrl + Alt + T

adb shell一些实用的命令

重要文件位置

用户数据(壁纸/系统属性settings命令存储相关的)

1
/data/system/users/0

Window相关

获取当前界面的ui信息

1
uiautomator # 可用于自动化操作

获取当前window的view元素

1
wm dump-visible-window-views # 获取更详细的控件数据可以研究android.view.View#encode源码进行手动解析实现类似于uiautomator功能

Activity相关

启动Activity前停止app

1
adb shell am start-activity -S -n com.example.app/.MainActivity

启动activity并等待打开

1
adb shell am start-activity -W -n com.example.app/.MainActivity

系统属性

列出存在的属性

1
2
3
4
adb shell settings list system
adb shell settings list global
adb shell settings list secure
adb shell getprop

网络相关

WIFI相关

开启WIFI

1
adb shell cmd -w wifi set-wifi-enabled enabled

扫描WIFI

1
adb shell cmd -w wifi start-scan

列出WIFI扫描结果

1
adb shell cmd -w wifi list-scan-results

列出当前保存的WIFI列表

1
adb shell cmd -w wifi list-networks

连接指定的WIFI

1
adb shell cmd -w wifi connect-network home-wifi wpa2 password

nc命令

1
2
adb shell nc -l -p 8888 # 监听客户端连接
adb shell nc 127.0.0.1 8888 # 连接服务端

代理

设置代理

1
2
3
4
5
adb shell settings put global http_proxy 192.168.225.100:3128
adb shell settings put global global_http_proxy_host 192.168.225.100
adb shell settings put global global_http_proxy_port 3128
adb shell settings put global global_http_proxy_username foo
adb shell settings put global global_http_proxy_password bar

移除代理

1
2
3
4
5
6
7
8
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
adb shell settings delete global global_http_proxy_username
adb shell settings delete global global_http_proxy_password
adb shell settings delete global global_http_proxy_exclusion_list
adb shell settings delete global global_proxy_pac_url
adb shell reboot

时间相关

设置时区

1
adb shell service call alarm 3 s16 America/Phoenix

设置时间

1
adb shell "su -c date $(date +%m%d%H%M%Y.%S)"

[!NOTE]

需要root权限

设备安全

设置不锁屏

1
adb shell locksettings set-disabled true

恢复出厂设置

1
am broadcast -a android.intent.action.FACTORY_RESET -n android/com.android.server.MasterClearReceiver

移动安全相关

监控目录下文件事件

1
2
inotifywait -r -m /path/to/directory # 监控所有事件
inotifywait -r -m -e create /path/to/directory # 监控特定事件

另辟蹊径检测app是否安装

1
stat -c %u /data/data/com.example # 测试在Android11上可用

使用Magisk root允许所有进程调试

参考:https://danylokos.github.io/0x02/

1
2
magisk resetprop ro.debuggable 1
stop; start

系统启动状态

1
2
adb shell getprop sys.boot_completed # 等于1时启动完成
adb shell getprop init.svc.bootanim # 等于stopped时开机动画完成

重启zygote进程

1
adb shell setprop ctl.restart zygote

屏幕相关

检查是否亮屏

1
adb shell dumpsys deviceidle | grep mScreenOn
1
adb shell dumpsys power | grep "Display Power"

显示触摸点

1
adb shell settings put system show_touches 1

显示触摸位置

1
adb shell settings put system pointer_location 1

录制触屏轨迹

1
2
3
adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log # 录制

awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent # 重放

语言相关

设置系统语言

1
2
3
4
5
6
7
adb shell content query --uri content://settings/system --where "name=\'system_locales\'"

adb shell content delete --uri content://settings/system --where "name=\'system_locales\'"

adb shell content insert --uri content://settings/system --bind name:s:system_locales --bind value:s:en-US
adb shell content insert --uri content://settings/system --bind name:s:system_locales --bind value:s:zh-Hant-TW
adb shell content insert --uri content://settings/system --bind name:s:system_locales --bind value:s:zh-Hant-TW,en-US,ja-JP

显示相关

字体缩放

1
2
3
4
5
adb shell settings put system font_scale 0.85 # (small)
adb shell settings put system font_scale 1.0 # (default)
adb shell settings put system font_scale 1.15 # (large)
adb shell settings put system font_scale 1.30 # (largest)
adb shell settings put system font_scale 2.0 # (sizes like this can only be achieved with custom adb setting, not from ui)

窗口管理

分屏模式Split screen

1
2
adb shell am start-activity -n com.whatsapp/.Main --windowingMode 3
adb shell am start-activity -n org.telegram.messenger/.DefaultIcon --windowingMode 4

悬浮窗模式Flating window

1
2
adb shell am start-activity -n com.whatsapp/.Main --windowingMode 5
adb shell am start-activity -n org.telegram.messenger/.DefaultIcon --windowingMode 5

账户相关

请求同步

1
requestsync

输入相关

keyevent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
0 -->  "KEYCODE_UNKNOWN" 
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3"
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"

进程相关

打印进程中的所有线程

1
ps -Twwww -p {pid}

命令行转义

解决多层嵌套转义

1
2
3
adb shell su <<-EOF
sed -i 's/hello" world/hello world/g' /sdcard/abc
EOF

使用here-doc的机制来避免复杂的命令增加多层转义,EOF前加-号可以确保文本内容使用tab来对齐代码

将aar文件转换成dex文件

1
~/Android/Sdk/build-tools/35.0.0/d8 --release demo.aar

adb shell加载termux环境

Let adb shell use termux command

通常我们调试应用的时候喜欢使用debug版rom不仅拥有root权限而且附带许多调试工具如curl、sqlite等,但是某些情况下我们可能不得不选择release版rom来调试由于该版本的特性会缺少很多调试工具使得用起来十分不顺手,因此本文介绍一下如何通过Magisk和termux来增强adb shell的使用体验。

1. Unlock root/解锁Root权限

本篇文章以Magisk Root为例,但该部分不是本文重点请自行搜索对应机型的安装方法。

另外提一下其他root软件没有经过测试也许有用。

2. Install termux terminal/安装Termux终端

https://f-droid.org/en/packages/com.termux/

3. Let’s work/adb shell加载termux环境

1
2
3
adb shell
su -c "sed -i 's/\\(com\\.termux [0-9][0-9]* \\)0/\\11/' /data/system/packages.list"
run-as com.termux files/usr/bin/bash -c 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; bash -i'

image-20240206144911168

4. Let’s be lazy/再懒一些使用tsh脚本

这样一个好处就是在同一个shell会话中可以直接使用tsh进入termux环境

1
2
3
adb shell
curl -L -o /data/local/tmp/tsh https://kaisar.kozow.com/2023/02/27/adb-shell%E5%8A%A0%E8%BD%BDtermux%E7%8E%AF%E5%A2%83/tsh
. /data/local/tmp/tsh

Reference|引用资料

1.https://gist.github.com/rewida17/f8564bee5a196a8f51b98cd2e53813e4

2.https://android.stackexchange.com/questions/225260/termux-running-termux-via-adb-without-any-direct-interaction-with-the-device

3.https://github.com/termux/termux-app/issues/77

解决Ubuntu 20.04无法导入Charles证书

之前在Ubuntu 16.04中使用Charles进行抓https的包一切都正常,但是最近在家里那台Ubuntu 20.04却始终装不上证书,会出现下面提示

Screenshot from 2021-12-15 15-10-52

每次导入证书右下角Import都不可点击,在Google找了很多资料都认为是一个Bug,毕竟在16.04上这么导入是没有问题的.

下面记录一下解决方案:

  1. 用命令行安装证书,首先导出Charles证书: Help->SSL Proxying->Save Charles Root Certificate, 再执行以下命令将证书导入系统

    1
    2
    mv charles.pem /usr/local/share/ca-certificates/charles.crt
    sudo update-ca-certificates
  2. 在Charles中开启SSL Proxying: Proxy->SSL Proxying Settings->SSL Proxying->Enable SSL Proxying, 点击Include下的Add按钮HostPort设置为*, 点击确定即可.

Screenshot from 2021-12-15 15-29-57

Frida开发手册

前言

以下是在使用python开发frida脚本过程中收集到的一些用法, 这里将学习的知识点做个归纳总结

Hook函数

Java普通函数

1
2
3
4
5
6
const Context = Java.use('android.content.Context');
Context.checkCallingOrSelfPermission.implementation = function (permission: string) {
// 以下两种写法都可以
// return Context.checkCallingOrSelfPermission.call(this, permission)
return this.checkCallingOrSelfPermission(permission);
}

如果没有同名的重载函数则直接调用函数的implementation来重写即可

阅读更多...

TypeScript回调函数this指向问题

最近在使用TypeScript开发frida hook时遇到一个问题,当把一个类的函数传给另一个方法作为回调函数时,this指针指向的不是原始类的示例,经过一番搜索发现有很多人也碰到同样的问题所以在此记录一下:
出问题的代码:

1
2
3
4
5
6
7
8
9
10
11
export class SetIntervalTest {
private someNumber: number = 1;

trigger() {
setInterval(this.setIntervalCallback, 400);
}

private setIntervalCallback() {
console.log(this.someNumber);
}
}

改成这样就可以了

1
2
3
private setIntervalCallback = () => {
console.log(this.someNumber);
};

因为只是为了临时解决业务问题所以暂不深究日后有空再来研究研究

相关链接:https://github.com/microsoft/TypeScript/issues/10285

解决gradle无法同步的问题

1
Could not install Gradle distribution from 'http://services.gradle.org/distributions/gradle-6.5-bin.zip'.

就在刚刚为了观摩一下libgdx引擎创建了一个工程虽然挂了梯子但是死活同步不了 不用说了肯定还是我们的万里长城防火墙搞的鬼了,感谢方校长让我们离西方的”邪恶势力”又远了一步!

好了 不吐槽了解决办法也很简单打开项目下的gradle/wrapper/gradle-wrapper.properties文件将下载地址改为https就好了

找回Ubuntu16.04中nautilus输入文字快速定位文件功能

16.04的版本中nautilus文件管理器有一项快速定位文件的功能非常好用直接在文件夹中打出首字母即可快速定位到文件,但是在18.04以上的版本中默认就取消了这项功能使得我迁移到新版本中非常不适应今天碰巧找到了找回这个功能的办法记录一下:

  1. 第一种安装第三方插件
    1
    2
    3
    sudo add-apt-repository ppa:lubomir-brindza/nautilus-typeahead
    sudo apt dist-upgrade
    nautilus -r
  2. 第二种调整配置文件
    先安装dconf工具 sudo apt install dconf-editor
    打开dconf-editor找到org -> gnome -> nautilus -> preferences -> enable-interactive-search 打钩即可

解决Android Studio missing essential plugin org.jetbrains.android

最近把Android Studio升级到了4.1.1版本之前安装了一个smailidea的插件老是报不兼容于是强迫症的我手贱了一下把插件给禁用了,禁用的时候没注意把依赖的一些东西也给禁用了于是报了下面的错误

这是禁用插件时候的依赖提示

可以看见其实把很多核心的组件都给禁用了那怎么办呢?难不成真的要按提示上说的要重装Android Studio?不要慌问题不大其实还有一种办法就是把被禁用的插件恢复就可以了,大家可以把Android Studio的配置目录的disabled_plugins.txt这个文件删除这样Android Studio就可以正常启动了, 这个文件每个系统存放的位置不太一样一般都在下面这几个目录 如果不在可以在主目录全局搜索一下这个文件

Windows: C:\Users\%USERNAME%\AndroidStudio4.1\config

Linux: ~/.config/Google/AndroidStudio4.1

MacOS: ~/Library/Application Support/Google/AndroidStudio4.1

  • Copyrights © 2015-2025 Kaisar
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信