参考之前的文章:https://blog.niekun.net/archives/413.html
确定您的 shell 类型。打开终端,运行以下命令:
echo $SHELL
这通常会返回 /bin/zsh 或 /bin/bash。
根据您的 shell 类型,编辑相应的配置文件:
对于 Zsh(最新的 macOS 默认使用):编辑 ~/.zshrc
对于 Bash:编辑 ~/.bash_profile 或 ~/.bashrc
使用文本编辑器打开相应的文件。例如,对于 zsh:
vim ~/.zshrc
在文件末尾添加以下行(替换为您的实际脚本目录路径):
export PATH="/path/script:$PATH"
保存并关闭文件。使更改生效,可以重新加载配置文件或重启终端。要重新加载,运行:
source ~/.zshrc # 如果使用 Zsh
source ~/.bash_profile # 如果使用 Bash
验证 PATH 更新:
echo $PATH
您应该能看到您的脚本目录已被添加。现在,您应该能够直接运行脚本,而不需要指定完整路径:
test.sh
注意事项:
chmod +x script_name.sh
)。ffmpeg -i input.mov -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast out.mp4
但是每次在命令行执行这么复杂的命令还是很不方便的,可以使用 macOS 自带的 automator 自动化工具制作一个简单的右键菜单动作,方便的对视频文件快速压缩。
打开 automator 新建一个 quick action,添加一个 run sheel script:
脚本内容如下:
for f in "$@"
do
/opt/homebrew/bin/ffmpeg -i "$f" -c:v libx264 -crf 30 -r 24 -movflags faststart -c:a aac -b:a 128k -preset superfast "${f%.*}_compressed.mp4"
done
# 播放声音
afplay /System/Library/Sounds/Blow.aiff
# 显示对话框
osascript -e 'tell app "System Events" to display dialog "视频压缩已完成" with title "通知" buttons {"OK"} default button "OK"'
保存后,在视频文件右键菜单的 action 栏就可以看到我们添加的动作了:
点击执行动作,完成后会有提示信息。
]]>工具:
首先需要主板支持虚拟化 VT,需要在 bios 中打开对应选项。注意此项必须配置,否则安装会不成功。
VMware workstation 默认不支持安装 macos,需要使用第三方工具 unlocker 来开启支持,直接在上方提供的 github 主页下载最新版本即可,运行 windows 文件夹下的 unlock.exe 即可。
然后下载 macos iso 镜像文件,在我上面提供的网站中下载即可。
按照正常的新建虚拟机的方式新建,添加下载好的系统镜像用来安装,配置好确认后先不要启动虚拟机,先修改对应虚拟机文件夹下的 vmx 文件。
文本编辑器打开 vmx 文件后,在最后一行添加一句:
smc.version = 0
保存后即可启动虚拟机,进入 recovery 工具后,先格式化硬盘,然后安装系统,提示一步步安装即可。
How To Install macOS Monterey On Vmware On Windows Pc
Windows用VM虚拟机安装MacOS Ventura 13.6系统全流程教程
今天在国外苹果论坛上看到有人介绍通过安装一些内核插件降低待机时候 ssd 的功率从而解决耗电问题https://discussions.apple.com/thread/252167491:
1) Get the newest firmware, where power management is already better and/or some sleep/wake issues are resolved
a) Either by upgrading to Big Sur (or in Catalina, Mojave the latest security updates) with your original SSD inside
OR
b) Upgrading Boot ROM Version without upgrading to Big Sur
2) Install tools which significantly lower the idle wattage for 3rd party SSDs
a) SsdPmEnabler
b) NVMeFix plugin inside lilu
c) a+b combined reach an even lower wattage in most cases
主要是第二条介绍的几个内核插件,SsdPmEnabler, lilu, NVMeFix
都是在 GitHub 上的开源软件,三个都是提供 .kext 文件,需要将 .kext
文件复制到系统路径 /Library/Extensions
,重启系统即可。
后续我会测试是否有效。
]]>目前有第三方的软件可以添加这些功能,比如 irightmouse,但基本都是收费软件,下面介绍如何通过系统自带的 automator 来添加我们需要的功能。
首先我们创建一个 Open in Visual Studio Code
的 action。
打开 Automator,点击 file - new 创建一个 quick action:
首先修改右边的参数,workflow receives current files or folders in finder,下面的 image 根据个人喜好修改:
然后左侧搜索 run shell script 双击添加到右侧,修改 pass input:as arguments,然后脚本内容如下:
for f in "$@"
do
open -a 'Visual Studio Code' "$f"
done
保存脚本即可,命名为 Open in Visual Studio Code
,需要保存到当前用户目录下的 library/services 目录下(默认就会保存到这个目录):
然后在 finder 中测试,选中一个文件夹查看右键菜单,在 quick action 中会出现 Open in Visual Studio Code:
点击后即可在 vs code 中打开文件或文件夹。
下面我们用同样的方法做一个复制文件或文件夹路径的 action。
新建一个 quick action,修改右边的参数,workflow receives current files or folders in finder。然后添加一个 copy to clipboard 的 variable 即可:
命名为 Copy Path
并保存即可。
此时 finder 中 quick action 菜单中就会有了对应的选项:
macOS 中没有右键创建新文件的选项,想要在当前目录中创建一个新文件挺麻烦的,下面我们通过类似的方法来创建一个快捷选项。
新建一个 quick action,这里 receives 选择 no input:
然后搜索并添加一个 Run AppleScript 变量,修改脚本内容如下:
set file_name to "untitled"
set file_ext to ".txt"
set is_desktop to false
-- get folder path and if we are in desktop (no folder opened)
try
tell application "Finder"
set this_folder to (folder of the front Finder window) as alias
end tell
on error
-- no open folder windows
set this_folder to path to desktop folder as alias
set is_desktop to true
end try
-- get the new file name (do not override an already existing file)
tell application "System Events"
set file_list to get the name of every disk item of this_folder
end tell
set new_file to file_name & file_ext
set x to 1
repeat
if new_file is in file_list then
set new_file to file_name & " " & x & file_ext
set x to x + 1
else
exit repeat
end if
end repeat
-- create and select the new file
tell application "Finder"
activate
set the_file to make new file at folder this_folder with properties {name:new_file}
if is_desktop is false then
reveal the_file
else
select window of desktop
set selection to the_file
delay 0.1
end if
end tell
-- press enter (rename)
tell application "System Events"
tell process "Finder"
keystroke return
end tell
end tell
脚本中,定义了新建文件的文件名和扩展名,如果修改其他名称可以自行修改。
完成后保存即可,名称为 Create New TXT File
。
保存后在 finder 中我们在任意位置右键会发现没有 quick action 选项,这是因为这个 action 定义中并没有选择输入源,因为新建文件和当前的文件并没有什么关系。
此时需要通过左上角的 finder - services 找到我们刚创建的 action:
也可以给这个 action 定义快捷键,在 keyboard - shrotcuts - services 中找到这个 action 在后边添加 shortcut 即可:
注意第一次运行这个 action 会提示需要授权 finder 的几个权限,根据提示打开即可。
Create a new (.txt) File in Finder - Keyboard Shortcut
OSX: how to add a right click option to a folder which opens the folder with an app like VS Code?
No rule to make target 'xxx', needed by 'xxx'. Stop.
解决方法就是删除项目编译输出文件夹内的隐藏文件 .qmake.stash
,删除文件后运行 build - clean, build - run qmake 重新生成此文件,最后再次重新编译即可。
今年发布的 macOS Monterey 增加了很多新功能,其中一个就是可以通过 AirPlay 将手机屏幕投放到 Mac 上。这个功能挺有意思的,但是当我把我的 MacBook Pro 升级系统后,发现无法使用这个功能,经过查询后发现这些新功能只对较新款的设备开放,这就有点让人吐槽了。
但是不放弃的我开始查询是否有大神给不支持的设备添加上这些功能,果然被我找到了,而且是一个挺有名的项目:OpenCore Legacy Patcher。
OpenCore Legacy Patcher 是一个旨在帮助不被苹果官方支持的老版本 Mac 升级到最新系统及特殊功能的项目。为这些老设备提供接近于原生的体验。
GitHub 地址:https://github.com/dortania/OpenCore-Legacy-Patcher/
我的是 2015 款 MacBook Pro,系统是支持直接升级到 Monterey 的,就是缺失了一些新功能,也可以使用这个工具来解锁这些限制。
在 release 页面下载最新版,下载 TUI 即可也就是 terminal 版:
https://github.com/dortania/OpenCore-Legacy-Patcher/releases
下载解压后拖放到 application 文件夹即可完成安装。
注意在操作前最好做一次 Time Machine 备份系统,以免操作失败后数据丢失。
打开OpenCore-Patcher 进入配置界面:
上面提示此设备并不在这个 patcher 列表中,因为它依然可以收到苹果官方的系统支持。但我们依然想利用这个 patcher 来解锁一些功能,所以首先我们需要允许 opencore 运行在此设备上。
选择 4. patcher settings 回车:
选择 8. allow opencore on native models 回车后输入 y 确认,修改后 8 选项变为 currently true:
输入 q 返回主菜单,可以看到显示当前设备已被支持:
如果你的设备本来就已经进入了 opencore 的支持列表,不需要 选中 native models。
下一步设置 opencore 的默认启动模式,默认情况下安装 opencore 后每次启动系统会自动跳入引导选择界面,用来选择正常启动还是通过 pathcer 启动。但是这样比较麻烦,一般情况下配置好后,我们希望自动进入 patcher 后的系统,所以我们将自动跳入引导选择界面功能关闭,这样后续依然可以通过启动时按住 option 键来进入引导选择。
主界面选择 5. patcher settings,然后选择 5. miscellaneous settings:
选择 1. set showpicker mode:
上面会提示此选项的含义,这里输入 n 关闭此功能:
输入 q 回到主界面。
下面我们需要将上面的配置的结果 bulid 到系统临时路径中,选择 1. bulid opencore,完成 build 后输入 enter 返回:
最后,就需要将刚才 build 的数据写入到 usb 或内部存储器中。
如果写入到 usb 中,如果需要系统加载那些隐藏功能,就需要插入写好数据的 usb 然后启动系统时按住 option 选择 opencore 引导系统。如果写入系统内部存储器,就无须外部设备了,可以做到正常启动自动加载 patcher。这里介绍直接安装到设备内部存储器。
主界面选择 2. install opencore to usb/internal drive:
输入 0 选择内部存储器:
在此输入 0 选择 EFI 分区:
确认后 opencore 就写入系统中。
等待完成写入后手动重启系统,启动时按住 option 键进入引导选择界面:
这里默认是选中系统默认引导的,如果需要后续每次启动都自动进入 opencore boot 引导的话,使用方向键选择到 opencore 图标的 boot 项,然后按住 control 键,此时引导下面会出现一个圆圈,鼠标点击此圆圈代表设置此选项为默认引导项:
选择 opencore boot 进入系统后,打开 system preference - sharing:
可以看到菜单中多了一个 AirPlay receiver,表明 AirPlay 功能已经成功启动,此时就可以测试手机的 screen mirror 能否监测到 Mac 了。
后续 OpenCore-Legacy-Patcher 如果有更新了,下载安装最新的 app 后再次通过以上同样的方法来更新补丁即可。
通过命令可以查看当前安装的 opencore 和 opencore legacy patcher 的版本。
opencore 版本信息:
% nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version
4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:opencore-version REL-073-2021-09-06
返回的 REL-073-2021-09-06
表示 opencore 0.7.3 版,编译于 2021.09.06
opencore legacy patcher 版本信息:
% nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version
4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:OCLP-Version 0.3.1%00
返回值表示当前版本为 0.3.1
如果通过 USB 加载 opencore 那么只需要拔出 usb 即可删除 opencore。
如果安装到内部存储器中,卸载稍微麻烦些,具体参考:Uninstalling OpenCore
Airplay BLOCKED on Monterey? How to unlock it!
OpenCore Legacy Patcher
How to Boot Recovery through OpenCore Legacy Patcher
Black Screen on MacBookPro11,3 in macOS Monterey
之前我的 MacBook 是通过 usb 直接连接外部硬盘来进行 Time Machine 的,需要将硬盘格式化为 macOS 扩展格式。既然有了网络存储中心,那么为什么不将 Time Machine 也放在网络驱动器上呢?
研究了下果然有解决方案的,基本原理就是通过在网络驱动器上创建一个 macOS 格式的虚拟磁盘,然后再 MacBook 上挂载这个虚拟磁盘就可以正常进行备份及还原了。
打开 MacBook 的 disk 应用,菜单选择:文件 - 新建镜像 - 空白镜像:
设置镜像合适大小,也就是虚拟磁盘的空间,我这里配置 1TB,注意磁盘格式为 macOS 扩展,镜像格式为稀疏磁盘镜像:
点击 存储 就生成了磁盘镜像文件了,默认会自动挂载这个镜像,我们手动将其推出。
也可以通过命令行的方式直接生成镜像文件:
hdiutil create -size 1024g -type SPARSEBUNDLE -fs "HFS+J" TimeMachine.sparsebundle
现在可以建立 APFS 格式的镜像:-fs 'APFS'
这里不需要担心 MacBook 上没有 1TB 这么大的空间,因为空白镜像只有 400MB 左右。
镜像生成好后,我们需要将其移动到网络驱动器中,可以通过 finder 通过 smb 的方式连接网络驱动器,然后移动 TimeMachine.sparsebundle 文件到合适的目录。
然后我们在 finder 中双击网络驱动器中的 TimeMachine.sparsebundle 会自动 mount 虚拟镜像。此时在 finder 中我们就可以看到挂载的 TimeMachine 磁盘了。
然后我们就可以设置 TimeMachine 绑定到这个磁盘:
sudo tmutil setdestination /Volumes/TimeMachine
注意磁盘路径需要根据你自己实际定义的虚拟磁盘名称来处理。
此时我们打开 TimeMachine 就可以看到已经绑定到我们的网络驱动器上的虚拟磁盘了:
我测试了下它的传输速度在千兆内网下能达到 50MB/s 左右,不是太快但基本能用。
备份的时候和直接连接 usb 没有什么区别,注意在重启系统后需要手动挂载下虚拟磁盘才可以正常备份。
我实际测试过开机 cmd + R 进入恢复模式后,在 TimeMachine 中能够正常识别到虚拟磁盘并进行系统还原。经过查询在 10.13.4 之后版本进入 recovery 可以直接选择连接到网络驱动器上,理论上可以在 UI 界面上直接选择连接到对应驱动器上,我之前测试中也是可以在 TimeMachine 列表中看到网络备份的。但是最近升级到 macos 14 后的一次系统故障需要恢复备份的时候发现,不能再 recovery 中找到网络备份,看来还是有一定限制的,此时需要手动在 terminal 中挂载上我们的备份镜像。
有几个前提条件:
挂载流程:
cd /Volumes
mkdir TimeMachine
cd TimeMachine
mount -t smbfs smb://username:password@ServerIPAddress/path/to/imagehomefolder /Volumes/TimeMachine
注意必须直接挂载到备份镜像文件所在目录hdid /Volumes/TimeMachine/NameOfYourSparseBundle.sparsebundle
exit
如果需要实现系统启动后自动挂载网络驱动器上的虚拟镜像,可以通过 apple script 的方式实现,脚本如下:
try
mount volume "smb://xxx.xxx.xxx.xxx/"
end try
do shell script "hdiutil attach -mountpoint /Volumes/TimeMachine/ /Volumes/网络驱动器名/PATH/TO/TimeMachine.sparsebundle"
脚本另存为 application 格式并 system preference 中加入开机自启动项即可。
添加Mac的Time Machine备份到smb网络硬盘(windows 共享文件夹)
自建Mac TimeMachine局域网无线备份环境
How to restore system from network drive
看了下 QT kit 配置里面发现 clang 的设置居然有叹号。重新识别了下系统编译器:
然后重建下项目配置:
重新编译项目依然有报错。
最后就是 boost 库的确有问题了。于是我重新编译了一次。居然问题就解决了。
原来真的是由于系统的 Clang 更新后原来编译的 boost 库不兼容了,在此使用当前系统的 Clang 编译一次就行了。
boost 库编译方法参考:https://blog.niekun.net/archives/1174.html
]]>但是安装好后,启动虚拟机会有一个报错:Network Initialization Failed,启动后会发现虚拟机无法联网,网络设置中无法正常在各种模式中切换。
在寻找解决方案期间,了解到了这可能是由于破解的原因,正版用户没有这个问题。网上有人提供了一个方法,执行一条命令就启动虚拟机就可以正常联网了。但是会导致虚拟机无法访问主机的共享目录及无法访问 USB 设备。而且一旦重启 parallels desktop 后又回恢复之前的状态,我也就没有去做。
这两天看到网上终于有人找到的解决方法,测试后的确可用,所以介绍给大家参考。
解决的方法都是通过修改相关配置文件实现的。首先需要彻底退出 parallels desktop。
修改 /Library/Preferences/Parallels/network.desktop.xml
文件。
在终端或者 vs code 中打开这个文件,找到 <UseKextless>
标签,将其中的内容改为 0:
<UseKextless>0</UseKextless>
注意如果你的这个文件内没有这个标签,则需要在 <ParallelsNetworkConfig>
根标签内手动创建它即可。
修改完成后保存文件,需要输入账户密码。
修改 /Library/Preferences/Parallels/dispatcher.desktop.xml
文件。
在终端或者 vs code 中打开这个文件,找到 <Usb>
标签,将其中的内容改为 1:
<Usb>1</Usb>
修改完成后保存文件,需要输入账户密码。
修改完以上两个文件后,重启 parallels desktop 就会发现一切都正常了。
]]>