V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HanningWu
V2EX  ›  macOS

请问各位有无可能用终端命令来更改某项 macOS 设置?

  •  
  •   HanningWu · 2022-11-30 17:09:28 +08:00 · 2154 次点击
    这是一个创建于 723 天前的主题,其中的信息可能已经有所发展或是发生改变。

    希望能够用终端命令来打开和关闭下图标注的这个选项

    印象中defaults命令似乎可以更改系统的配置,比如

    defaults write -g NSWindowShouldDragOnGesture -bool true
    

    但不知道怎么使用defaults来更改某项特定设置

    当然,有个笨方法是用 AppleScript 来操作 GUI ,但是希望避免这种解法

    感谢各位

    15 条回复    2022-12-03 09:05:42 +08:00
    di11wei
        1
    di11wei  
       2022-11-30 19:21:27 +08:00
    我不理解啊,有图形的开关为啥要用终端去操作呢
    nah
        2
    nah  
       2022-11-30 19:36:44 +08:00
    同等,我也希望有个命令能保存和执行 mac 的所有 system preferences 的改动。
    mac 现在一点也不 unix-like 。
    HanningWu
        3
    HanningWu  
    OP
       2022-11-30 19:52:32 +08:00
    @di11wei 有时候突然需要把设备给有经验的同事用那么几分钟,比如请教 ta 一个问题,当着人家面每次都要改这个设置很没效率。如果通过命令行能实现,就可以绑定一个快捷键,每次同事过来我一键就能切换了。
    lirunext
        5
    lirunext  
       2022-12-01 00:49:47 +08:00   ❤️ 2
    可以交流一下。个人曾经也有类似问题,研究出一个方法:在修改前 defaults read xxx 来输出修改前的所有项和值,然后在 UI 修改要寻找的设置项,改完后再 defaults read xxx 来输出修改后的所有项和值,对比下两次的结果变化就知道是哪个了。

    p.s 内容太多的话可以用 defaults read xxx >name.txt 的方式导出到文本文件,再用文本对比软件来对比,会比较方便。
    lirunext
        6
    lirunext  
       2022-12-01 00:55:11 +08:00
    另外,楼上这个方法只能找到是哪个项,要马上生效的话也是个问题,UI 操作修改了设置只要点“完成”就马上生效了,这样通过改配置文件的方式往往并不会马上生效,需要程序重新加载读取这个配置文件才会生效,所以这种情况下还得需要再把进程杀掉再重新打开。

    特此借楼提个问题,有没有方法实现 UI 操作中点“完成”那种马上生效且不必重启进程的效果?
    HanningWu
        7
    HanningWu  
    OP
       2022-12-01 05:26:57 +08:00
    @lirunext 很取巧,可惜我没找到对应的内容(搜了 Latin/CapsLock/Input 之类的关键字),还是感谢了。这个方法深挖的话,好像很有玩头!
    Eloxt
        8
    Eloxt  
       2022-12-01 08:45:57 +08:00
    请教一下截图中的强调色是怎么设置的?似乎不是系统自带的颜色。
    lirunext
        9
    lirunext  
       2022-12-01 13:55:38 +08:00
    @HanningWu 你是 read 哪个 plist 的?按道理来讲这些设置一般都是存在 plist 里的,对比下修改前后的内容差别,不是找错了 plist 文件的话不应该找不到
    HanningWu
        10
    HanningWu  
    OP
       2022-12-01 15:46:15 +08:00
    @lirunext 我在改设置前后分别保存了一下 defaults read 的全部内容
    lirunext
        12
    lirunext  
       2022-12-01 16:38:54 +08:00   ❤️ 1
    @HanningWu 帮你找了下,是~/Library/Preferences/.GlobalPreferences.plist 这个文件里“TISRomanSwitchState”这个项,数据类型是 int ,0 表示关,1 表示开,以下命令可以直接用:
    defaults write .GlobalPreferences TISRomanSwitchState -int 0
    defaults write .GlobalPreferences TISRomanSwitchState -int 1

    接着 6 楼的问题,我试过命令执行后并不会马上生效,而是要注销当前用户 /重启才生效,如果你能找到相关的进程然后干掉再启动说不定也可以马上生效。
    HanningWu
        13
    HanningWu  
    OP
       2022-12-02 01:28:29 +08:00
    @lirunext 真是神了,完美解决问题。敢问你找这个配置的思路是什么?
    tobemaster
        14
    tobemaster  
       2022-12-02 11:23:02 +08:00
    首先我尝试了一下用 AppleScript ,即便有 ui browser 的帮助,最后,没写出来,AppleScript 编程有太多的局限性,
    后来,我换了另外一个软件,试了一下,录制了一个操作,看起来效果挺好的,
    这个软件是 https://www.keysmith.app/ ,我是因为用了 Setapp ,单买的话,貌似挺贵的。
    这个 APP 可以解决很多其他的自动话操作,也算是各思路吧

    自动化切换 capslock
    链接: https://lusun.com/v/T6baNlKKZuZ
    lirunext
        15
    lirunext  
       2022-12-03 09:05:42 +08:00   ❤️ 3
    @HanningWu 一般系统配置存在.GlobalPreferences.plist ,可以用 defaults read .GlobalPreferences 来读取,按我 5 楼的方法就可以对比出来是哪个的。如果是系统自带 app 或第三方 app ,可以用 defaults domains | tr ',' '\n'命令来查看所有 domain ,按名字找找是哪个,然后再用 5 楼方法即可,一般情况下这种方法可以绝大部分类似问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2834 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:50 · PVG 15:50 · LAX 23:50 · JFK 02:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.