macOS 使用 scrcpy 实现控制和投屏 Android 手机

安装

image-20241206午後44234742

brew install scrcpy
brew install --cask android-platform-tools

安装之后,android手机启用“开发者选项”和“USB调试”之后,就可以投屏到macOS上了,如下图:

image-20241206午後45810638

scrcpy --select-usb -m 1024  -b 20M --no-audio --max-fps=15 --always-on-top  --turn-screen-off

投屏命令参考

1、连接手机

通过 USB 连接,并且只有一台手机的时候:

scrcpy --select-usb

通过 WiFi 连接,并且只有一台手机的时候:

scrcpy --select-tcpip

也可以指定 IP 地址和端口:

scrcpy --select-tcpip=http://192.168.1.1:5555/

2、设置投屏分辨率

分辨率设置稍微小一点,可以提高性能,使投屏更加流畅。

scrcpy -m 1024

3、设置比特率

比特率设置高一点,视频会更加流畅一点,默认的 8Mbps。

scrcpy -b 20M

4、设置帧率

scrcpy --max-fps=15

5、设置编码格式

编码格式有三种,分别是 h264(默认格式)、h265 和 av1,h265 可以提高视频质量,h264 可以提供更低的延迟,av1 格式目前在手机上还不是很普遍。

scrcpy --video-codec=h264

6、只投屏声音,不投图像

scrcpy --no-video

7、只投图像,不投声音

scrcpy --no-audio

8、获取麦克风的声音

默认情况下,投屏的是手机输出的声音,我们要可以投屏获取麦克风的声音。

scrcpy --audio-source=mic

9、录制屏幕

scrcpy -r record-file.mp4

10、投屏窗口置顶

scrcpy --always-on-top

11、投屏时关闭手机屏幕

scrcpy --turn-screen-off

更多的操作方式,可以查询 scrcpy 的官方文档。

直接操作命令/ADB 命令

一个简单的划屏操作:

#!/bin/bash

# 循环滑动次数
for i in {1..10}; do
    echo "滑动第 $i 次"
    adb shell input swipe 500 1500 500 500 300
    sleep 1  # 每次滑动间隔 1 秒
done

随机划屏:

#!/bin/bash

for i in {1..10}; do
    x1=$((RANDOM % 1080))  # 随机宽度,假设屏幕宽为 1080px
    x2=$((RANDOM % 1080))
    y1=$((RANDOM % 1920 + 1000))  # 假设屏幕高为 1920px,随机滑动大部分区域
    y2=$((RANDOM % 1000))
    duration=$((RANDOM % 200 + 200))  # 随机滑动时间 200ms 到 400ms

    echo "滑动第 $i 次: 从 ($x1, $y1) 到 ($x2, $y2),持续 $duration 毫秒"
    adb shell input swipe $x1 $y1 $x2 $y2 $duration
    sleep 1
done

参考资料


在 Chrome 中强制启用暗色模式

午休时间,使用 chrome 浏览网页太耀眼了。简单研究了一下,Chrome 可以强制页面变暗色,操作起来非常简单:

  1. 在 Chrome 地址栏输入以下内容并回车: chrome:*//flags/#enable-force-dark*
  2. 找到 Auto Dark Mode for Web Contents 选项。
  3. 将其设置为 Enabled
  4. 重启 Chrome。

这样,无论网页本身是否支持暗色模式,都会以暗色显示。

顺便,我系统是 macOS 15.1

PS:这个功能对一些网页可能会有点影响,如果觉得不合适,可以随时切回去。


在 Android Chrome 上把标签栏放到底部

最近在 Android 上使用 Chrome 浏览器,发现标签栏默认在顶部,操作起来有点不顺手。 Chrome 提供了一个实验性功能,可以把标签栏移到底部,效果看起来更加方便,以下是具体步骤:

  1. 在 Chrome 的地址栏输入 chrome://flags,然后回车。
  2. 在搜索框中输入 Tab Strip 或 Bottom Toolbar,查找相关的实验性功能。
  3. 有时这个选项可能显示为 Chrome DuetTab Grid Layout
  4. 找到对应选项后,将其状态从 “Default” 改为 “Enabled”。
  5. 完成后,浏览器会提示需要重新启动,点击重启即可。

macOS 定时自动亮屏

通过 macOS 自带的 caffeinate 工具和定时任务 crontab,可以轻松实现定时自动亮屏的功能。以下是模拟用户活动并保持屏幕唤醒 10 分钟的具体实现。

wake_screen.sh

#!/bin/bash

# 获取当前时间(小时和分钟)和日志时间(带日期)
current_time=$(date +'%H:%M')
log_time=$(date +'%Y%m%d_%H%M')
sleep_time=1  # 设置每次睡眠时间
# 计算循环次数,使得总执行时间接近 60 秒
loop_count=$(( 60 / sleep_time ))

# 检查是否为每天 8 点,并清空日志
if [[ "$current_time" == "08:00" ]]; then
    echo "[$log_time] 日志已清空" > "$log_file"
fi

# 判断是否在 13:00 到 13:02 之间
if ([[ "$current_time" > "18:20" && "$current_time" < "18:40" ]] || 
    [[ "$current_time" > "13:00" && "$current_time" < "13:02" ]]); then
    echo "[$log_time] 执行 caffeinate 命令" >> ~/Workspace/log/cron/caffeinate.log

    # 使用 for 循环动态执行 caffeinate 命令
    for i in $(seq 1 $loop_count); do
        caffeinate -u -d -t $sleep_time
        log_time_2=$(date +'%H%M%S')
        echo "[$log_time] $i $log_time_2 end" >> ~/Workspace/log/cron/caffeinate.log
    done
else
    echo "[$log_time] 当前时间不执行命令" >> ~/Workspace/log/cron/caffeinate.log
fi

赋予脚本执行权限 chmod +x ~/wake_screen.sh

macOS 下 cron 的说明

​ 1. 正常情况下,无需手动重启 cron 服务

macOS 默认启用 cron,修改 crontab 文件后会自动加载新任务。

​ 2. 检查任务生效

使用命令查看当前任务:crontab -l,确保定时任务已正确保存。

​ 3. 手动启动 cron(异常情况下)

如果任务未运行,可以手动启动 cron:

sudo launchctl load -w /System/Library/LaunchDaemons/com.vix.cron.plist

腾讯云主机移除监控程序

刚买的服务器,看看,这么多的 agent。

image-20241013上午40101283

cron

crontab -e

包含了这样的任务,直接删掉。

*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'

还有这个定时任务:

rm -f /etc/cron.d/sgagenttask

/usr/local/qcloud

自带了这些agent的卸载脚本:

/usr/local/qcloud/stargate/admin/uninstall.sh
/usr/local/qcloud/YunJing/uninst.sh
/usr/local/qcloud/monitor/barad/admin/uninstall.sh

看看还有什么东西:

ps aux | grep agent

还有一个:

/usr/local/qcloud/tat_agent/tat_agent

看了一眼,找不到卸载的脚本。

systemctl stop tat_agent
systemctl disable tat_agent

删除多余文件:

rm -f /etc/systemd/system/tat_agent.service
rm -rf /usr/local/qcloud
rm -rf /usr/local/sa
rm -rf /usr/local/agenttools

macOS 模拟触摸板向下滑动

今天需要在 macOS 上模拟触控板滑动事件,并且希望模拟自然的人类手势,即速度由慢到快。用 Swift 来实现,并控制滑动的时间间隔,目标是每隔 4 到 8 秒执行一次向下滑动的操作,滑动时速度逐步加快。简单记录一下:

import Foundation
import CoreGraphics

func simulateAcceleratingScrollDown() {
    let totalSteps = 25
    let initialScrollAmount: Int32 = -5
    let maxScrollAmount: Int32 = -25
    let initialDelay: TimeInterval = 0.1
    let minDelay: TimeInterval = 0.02
    
    for step in 1...totalSteps {
        let scrollAmount = initialScrollAmount + (Int32(step) * (maxScrollAmount - initialScrollAmount) / Int32(totalSteps))
        let currentDelay = initialDelay - (initialDelay - minDelay) * Double(step) / Double(totalSteps)
        let scrollEvent = CGEvent(scrollWheelEvent2Source: nil, units: .pixel, wheelCount: 1, wheel1: scrollAmount, wheel2: 0, wheel3: 0)
        
        scrollEvent?.post(tap: .cghidEventTap)
        Thread.sleep(forTimeInterval: currentDelay)
    }
}

func randomInterval() -> TimeInterval {
    return TimeInterval(arc4random_uniform(5) + 4)
}

func startRandomScrolling() {
    let interval = randomInterval()
    Timer.scheduledTimer(withTimeInterval: interval, repeats: false) { _ in
        simulateAcceleratingScrollDown()
        startRandomScrolling()
    }
}

RunLoop.current.run()

解释:

  • simulateAcceleratingScrollDown(): 模拟触控板的滑动动作,滚动步数由慢到快,每步滚动的像素量逐渐增加,延时逐渐缩短。
  • randomInterval(): 生成 4 到 8 秒的随机时间间隔。
  • startRandomScrolling(): 定时器每次等待随机时间后调用滑动事件,并继续递归调用。

不过要注意的是,还需要设置 xcode 的权限,才可以模拟执行滑动(运行脚本时候会自动提醒打开):

image-20241211午前110946693


1 2 3 4 5 6 7 165 166