锁屏命令单行


62

我试图找出是否有任何等效的命令行单行代码,这些命令行复制了OS X 10.6中通过Keychain应用程序提供的“锁屏”菜单选项的完全相同的功能。

我知道所有“常用”解决方案(需要重新激活密码的睡眠/屏幕保护程序首选项),但是这些都不适合我。

我也知道这个选项:

/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend

这也不适合我。

完美的功能是“锁定屏幕”选项,但是我还没有找到一种优雅的方式来调用它。

此刻,我正在通过Automator打电话,这不是很优雅!

我已经阅读了很多有关此问题的文章,我的理解是,还没有人找到“圣杯”,但我想知道这是否可能会改变。


您如何称呼Automator?
Matthieu Riegler 2013年

3
当屏幕保护程序处于活动状态,然后使用热角激活屏幕保护程序时,将“安全性”首选项设置为要求输入密码有什么问题?那是快速而优雅的,但是您说您不喜欢这种解决方案。
ⱮarkƬ

3
这是一个务实的建议,我已经尝试了多年的使用经验,但是我的工作模式的性质意味着这有80%的可能会成为问题。我需要能够(从物理上)响应工程请求和紧急情况,并立即锁定屏幕,但同样可以远程访问该设备,同时还可以维护其所有现有连接和后台任务。
user40433 2013年

1
回复:“钥匙串中的锁屏菜单在哪里”打开钥匙串...首选项...显示在菜单栏中!回复:“它做什么?” 锁定屏幕!除此之外,我想我已经非常详尽地解释了我的要求(以及我对某些人认为可以满足我的要求但对“解决方案”的厌恶)。
user40433 2013年

Answers:


50

在OS X 10.9和更高版本中:

pmset displaysleepnow

就其本身而言,此命令仅使显示器休眠,从而导致黑屏。通过将计算机配置为在睡眠后立即要求输入密码,此单线便可以用作“锁定计算机”命令。该首选项位于系统首选项>安全和隐私>常规中

资料来源:如何在MacBook Air上锁定屏幕?


9
仅出于完整性考虑,只有在系统偏好设置中将“在睡眠或启动屏幕保护程序后重新输入密码”安全选项设置为打开时,此选项
才起作用

1
这似乎最等效于CTRL + SHIFT + Eject。
Jan Kyu Peblik

这不等同于“钥匙串”菜单栏项。它不会锁定屏幕。它只会使计算机进入睡眠状态。
Radon Rosborough

1
@RadonRosborough不,它不会使计算机进入睡眠状态。它确实使显示器进入睡眠状态。如果您远程访问锁定的Mac,则一切正常。这可能是最短和最快的答案,因为它没有通过所有Keychain慢GUI或Finder慢GUI。

这比旧的,放置不当的钥匙串菜单项better更好。
丹,

41

注意:该解决方案的独特之处在于它使用了“钥匙串访问”菜单栏状态功能,但是它不需要Show keychain status in menu bar像AppleScript方法那样启用该选项。

我也在寻找解决方案。今天,我只有一点时间玩耍,并找到了一种通过编程方式实际调用钥匙串菜单插件中的功能的方法。只要Apple不更改钥匙串菜单插件中的相关部分,该解决方案就可以完美地工作。您可以通过将其粘贴到终端中来创建一个小的二进制文件来锁定屏幕...

# Do our work in the temporary directory that gets cleaned on boot
cd /tmp

# Create the source file
cat > main.m <<END_OF_FILE

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}

END_OF_FILE

# Compile the source file
clang -framework Foundation main.m -o lockscreen

通过键入以下内容来执行程序:

./lockscreen

您能否详细说明如何使用此功能?是否将其复制粘贴到Automator工作流程中?还是用它制作出Applescript?就目前而言,很难对您的答案做些什么。
SaaruLindestøkke2014年

1
这是一个简单的Objective-C程序。将其复制到名为main.m的文件中。然后运行“ clang -framework Foundation main.m -o lockscreen”来编译程序。“ ./lockscreen”运行程序并锁定屏幕。
mrArkwright 2014年

尝试了一下,按说明工作。编译生成一个警告instance method '-_lockScreenMenuHit:' not found,但是锁屏应用程序仍然可以运行。但是,双击它会在锁定屏幕之前打开一个终端窗口。解锁后,您必须手动关闭窗口。有没有一种方法可以自动关闭该窗口?
SaaruLindestøkke2014年

6
我根据此答案和链接中详细介绍的某人的工作收集了一个OS X App:Lock Screen.app,它只是包装了这段代码并添加了漂亮的图标,因此我们可以直接运行它,谢谢。
Mengdi Gao 2014年

1
这在10.13上无法正常运行,因为MenuExtra已被删除。而是改为:stackoverflow.com/a/26492632/368409
Lloeki

15

我用阿尔弗雷德→

在此处输入图片说明

通用热键允许我使用键盘激活它。


太棒了!通用热键是内置的还是Powerpack的一部分?
Dan Rosenstark 2014年

1
它是内置的…
Vaibhav Bajpai 2014年

2
遗憾的是,它不是-它同时也关闭了Internet连接,而使用Keychain菜单锁定却没有。
Marcin Bobowski

Launchbar中也有一个等效项:“锁定屏幕”
William Turrell

这不等同于“钥匙串”菜单项。它不会使计算机进入睡眠状态,并且还会播放令人讨厌的动画。
Radon Rosborough

15

更新:2019。

当前版本的MacOS Mojave&High Sierra中不再提供钥匙串的锁定屏幕。

Apple现在在Apple菜单中添加了“锁屏菜单”项。这具有默认的键盘快捷键crtl + cmd + Q

在此处输入图片说明


------------- 以下是以前操作系统的旧答案 --------------

@Bart Arondson的答案涉及使用一些按键代码来导航“钥匙串锁屏”菜单。

可以使用GUI脚本绕过所有键代码,以直接直接击中菜单项。

使用键码导航菜单可能会命中注定。而且,尽管我不喜欢GUI脚本,因为它也可能会碰碰运气,恕我直言,在这种情况下,碰巧会少。

这个applescript代码:(更新日期为2016年5月18日,源自使用AppleScript锁定屏幕,并确认可在El Capitan中使用)

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "Keychain menu extra")
        click
        click menu item "Lock Screen" of menu 1
    end tell
end tell

可以在Automator服务工作流程中的Automator“运行Applescript”操作中使用。

在此处输入图片说明

然后,您为服务提供键盘快捷键。以通常的方式在“键盘快捷键”中进行操作。

在此处输入图片说明

服务:

在此处输入图片说明


这对我需要的功能非常有用,谢谢!
nictrix 2014年

您还可以从automator运行终端命令,因此我使用了该命令。它缝得更“优雅” :)。很好的解决方案!
Sorin Buturugeanu 2015年

3
我用这个解决方案很长一段时间,但由于OSX版船长巨岩它不工作了:(。
马辛Bobowski

还在看这个。但是,看起来该菜单并未针对要单击的下一个项目报告自身。运行这两行是可行的,但速度很慢。tell application "System Events" to tell process "SystemUIServer" to click (first menu bar item of menu bar 1 whose description is "Keychain menu extra") tell application "System Events" to click (menu item "Lock Screen" of menu 1 of menu bar item 1 of menu bar 1 of application process "SystemUIServer")
markhunte

8

设置首选项以在屏幕保护程序处于活动状态时锁定屏幕。

安全和隐私首选项窗格

然后,您可以使用此终端命令来启动屏幕保护程序。

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

据我所知,这正是“钥匙串”菜单项的功能。


感谢您的评论,但这是我与之争战了太久了,正在尝试寻找替代方案。
user40433

1
只是为了清楚和完整起见,我应该确实确实启动了屏幕保护程序,但它没有执行“锁定屏幕”菜单功能所提供的功能。
user40433 2013年

1
然后,您需要更确切地确定您要寻找什么。
ⱮarkƬ

嗯...不知道我能比我最初提问的开头段落更具体或更简洁吗!
user40433 2013年

1
我有机会在10.6.8上进行测试。在该OS上,显示器已关闭并且会话已锁定。我找到了一种编程的方式来执行此操作,但它不是内置的。
ⱮarkƬ2013年

3

我认为您的问题的答案是“不,没有命令行方式可以做到这一点。”

由于这是一个菜单栏项,因此使用Keyboard Maestro或其他类似工具无法轻松访问。

但是,如果您不反对使用第三方应用程序的解决方案,则 QuickLock将允许您执行此操作。

这是一个免费(接受捐赠)的应用程序,可让您分配键盘快捷键来锁定屏幕。您还可以单击菜单栏项以锁定屏幕。

该应用程序将允许您设置密码(与帐户密码分开)。

它不需要在屏幕保护程序中使用密码,而是完全分开的。

您可以在http://www.youtube.com/watch?v=SBHwykPB19o上观看有关它的视频

ps当屏幕锁定时,输入密码以将其解锁。我很困惑,因为我希望看到一个密码字段。空无一人。您只需输入密码。

pps我只用了几分钟,所以可能有一些我不知道的其他问题,但似乎符合要求。


感谢您的贡献...尽管不是我最初想要的(我喜欢开源和DIY方法!),它看起来确实很有趣,并且似乎提供了我需要的功能,尽管在第三方应用程序中也是如此。我会仔细研究。谢谢!
user40433 2013年

我也想找到一种方法来做,但是我认为没有办法。
TJ Luoma 2013年

似乎死了……
rogerdpack

3

Mac并非旨在为您提供这种选择。但是,本文介绍了使用QuickSilver的一种解决方法。虽然我不明白为什么您不喜欢Apple本地提供的解决方案,但我希望您能找到一个解决方案的机会很幸运。


3

在AppleScript的帮助下,通过命令行使计算机休眠的一种快速方法是

osascript -e 'tell application "Finder" to sleep'

除非您将其设置为立即要求输入我不喜欢的密码,否则这不会锁定屏幕。我只是为了后代而已。


3

简单的别名。将此添加到您的bashrc

alias afk="osascript -e 'tell application \"System Events\" to keystroke \"q\" using {command down,control down}'"

输入afk您的终端以执行。


2

我使用了jnk上面发布的代码。然后,我使用appify将其变成OS X应用程序mathiasbynens.be/notes/shell-script-mac-apps。然后,我使用Quicksilver分配了自己的键盘快捷键(我选择了cmd + L)。终端没有打开/保持打开状态(某些人担心),因为我相反启动了OS X应用程序。

  1. 按照jnk(锁定屏幕命令单行代码)的上述回答进行操作
  2. 按照我的摘要中的上面的链接,使用appify将其转换为OS X应用程序。
  3. 安装Quicksilver。
  4. 使用Quicksilver分配键盘快捷键以启动新应用程序。它在“触发器”下。我喜欢Quicksilver,是因为我喜欢使用键盘快捷键/热键在OS X上启动应用程序和网站。

1

我也遇到了这个问题。/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend使系统挂起所有任务,而不是锁定屏幕。

JordanBtucker处在正确的轨道上,这是我使用的全部功能:

lockscr() {
  if [ "$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null)" ]; then
    local Olddelay="$(defaults read com.apple.screensaver askForPasswordDelay)"
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults write com.apple.screensaver askForPasswordDelay -int "${Olddelay}"
  else
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults delete com.apple.screensaver askForPasswordDelay
  fi;
}

这样可以保留用户自己的设置,但可以安全地锁定屏幕:)


在High Sierra中,UI不再设置这些值。但是,如果您手动设置它们,则UI将兑现它们。 defaults write com.apple.screensaver askForPassword -bool TRUEdefaults write com.apple.screensaver askForPasswordDelay -int 10 这些都是我的默认值。现在,上面的脚本将按照描述的方式运行。
肖恩·佩里

0

我为此使用了BetterTouchTool,并为“切换到登录屏幕”(即锁定屏幕)分配了键盘快捷键:不满足命令行要求,但仍然可能对您有所帮助。

BetterTouchTool中的键盘快捷键以锁定屏幕


感谢您的帮助和建议。随着快速锁定由@TJLuoma上述BetterTouchTool(虽然不是我着手寻找方法)确实出现了非常接近我的功能目标。我会仔细看一下...谢谢。
2013年

0

我不太确定我在这里了解您的问题。如果您在屏幕保护程序上要求输入密码,它将不会阻止进程运行或阻止您远程访问Mac。我设置了此选项(使用ControlPlane在工作中激活它,然后在家里禁用它),而且我从未有过系统拒绝响应远程桌面,VNC或SSH连接的经历。在需要GUI访问的所有情况下,我只需要输入密码即可;SSH使用密钥对,因此不需要密码。如果您不想让应用程序进入睡眠状态,请确保系统电源设置为使其在返回之前不会进入系统睡眠状态。只需将睡眠超时设置为较长的​​延迟即可。如果您不想在坐在电脑前工作时打扰输入密码,

我使用ctrl-shift-eject锁定屏幕。它快速,简单且有效。这是锁定屏幕的内置方法。没有人可能会提出另一种选择,因为仅仅复制已经包含在操作系统中的功能对于任何人来说都太多余了,以致于没有足够的时间去追求。

据我所知,无论如何在10.8的钥匙串中都没有“锁定屏幕”选项,因此如果您进行升级,首选的解决方案将不复存在。编辑:在钥匙串偏好设置中没有注意到这一点;是的,它仍然存在于10.8中。

如果您为此使用Automator,是否不能仅将脚本打包为应用程序并分配热键组合,还是将其保留在Dock中以便快速访问?


ctrl-shift-eject实际上只是进入“快速用户切换”模式。至少有一种VPN解决方案(我需要用于工作目的的解决方案)不喜欢这种方法,并且在这样做时会断开VPN的连接,从而终止我可能已连接的任何基础会话。解锁计算机后,我可以简单地重新连接到VPN会话,但是这可能需要一分钟以上的时间,因此无法使用“快速”选项。因此,海事组织,这不是该问题的准确解决方案。
乔恩五世

0

就像提问者一样,我一直在寻找一种快速使用钥匙链锁屏的方法。

结合旧Mac OS X提示中的知识和一些Applescripting,我想到了以下内容:

首先,按照链接的Mac OS X提示中的步骤操作,为“钥匙串锁屏”功能添加键盘快捷键。

对我而言(在10.8.4上),这并不能解决问题,因为我必须按ctrl+ F8将焦点移至状态栏,按down打开“钥匙串”菜单栏,然后​​按ctrl+ F9锁定屏幕。我已使用以下Applescript使此过程自动化:

# Press ^F8
tell application "System Events"
    key code 100 using control down
end tell

# Press "down"
tell application "System Events"
    key code 125
end tell

# Press ^F9
tell application "System Events"
    key code 101 using control down
end tell

打开Automator,创建一个新服务,添加一个Run Applescript模块,复制粘贴上面的代码,并使用所需的名称保存Automator服务。现在,转到“系统偏好设置”中的“键盘快捷方式”,并为新创建的Automator服务添加键盘快捷方式。我将我的设置为ctrl+ cmd+ L

现在,在任何应用程序中按键盘快捷键,屏幕将立即锁定。

对于那些想知道为什么不仅仅使用其他方法的人,我对它们有以下看法:

  • 快速的用户切换/锁定屏幕
    使用这种方法,我退出了公司的WPA2网络。这不好,因为重新连接有时会花费一些时间。

  • 屏幕保护程序+密码
    复制该功能,但这意味着如果我在阅读旁边的纸张时笔记本电脑有一段时间没有使用,则当我再次使用它时,屏幕将被锁定。这是不希望的。将此方法与热角结合使用会产生副作用,即经验不足的Mac用户可能会偶然触发热角而导致屏幕锁定。我有时还偶然碰到一个热角,这会极大地阻碍我的工作流程。

  • 第三方应用程序
    这些都很好,但是如果操作系统本身提供了第三方应用程序,为什么还要运行它?


0

在10.14.6 Mojave上,我改用以下命令启动屏幕保护程序引擎:

/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine


但它没有锁定。我按了一个键,它又打开了。介意您是否在系统偏好设置中阅读了有关“要求后立即输入密码”的其他答案的评论并相应地更新您的评论?
ankii

-1

我在10.6.8上使用击键(Ctrl + Shift + Eject)来使用Screensaver密码设置,从我的看到的结果来看,它与“钥匙串访问”任务栏图标中的“锁定屏幕”项相同。

我知道这与其他一些答案类似,但是它使用了击键代替了“热角”,对我来说更方便。

此解决方案在此处详细介绍,这是我从以下位置获得的解决方案:http : //osxdaily.com/2011/01/17/lock-screen-mac/

现在已经使用了几年没有问题。


1
谢谢,但是不幸的是,这要求选中“从睡眠或屏幕保护程序返回时需要屏幕保护程序”选项,并且如前所述,我不希望这样做。
user40433 2013年

-1

好吧,只需结合以上两个答案即可。运行以下命令:

open -a /System/Library/Frameworks/ScreenSaver.framework//Versions/A/Resources/ScreenSaverEngine.app

设置安全和隐私首选项后,立即要求输入密码。如果要使命令更易于执行,请为您的外壳命名。


3
是的,但是,如上所述,我不希望“安全性和隐私”首选项始终要求立即输入密码。这就是“锁定屏幕”命令功能(特别是)如此酷的原因-它提供了我完全需要的安全级别。
2013年

-1

FWIW,我了解您的情况,并一直在为此寻求良好的解决方案。我遇到了这个问题,因为我一直在寻找比最终想出的更快的方法。尽管不是我所希望的那样,我想出了一些可行的方法,并且可以接受。我正在使用与@markhunte所示相同的GUI脚本命令(结构略有不同,但思路相同),但我不只是将其全部放入Automator服务工作流程中,而是将其分离为使用Platypus构建的.app软件包。我这样做是因为在旅行和测试中,我发现Automator服务在某些条件下运行非常缓慢。如果您的Mac承受任何压力,例如正在运行磁盘扫描,A / V软件正在执行某些操作,邮件提取电子邮件等,操作系统似乎将服务推到了最后。这样的影响是,它需要花费几秒钟的时间(有时)才能运行工作流,有时甚至需要几秒钟才能运行该服务中的GUI命令。如果您要“快速”锁定屏幕,那会很烦人,这需要10秒钟!

拥有独立的“应用程序”还具有一个优点,即您可以使用数十种不同的第三方应用程序来运行它,也可以仅使用Spotlight或Automator服务来启动该应用程序。他们中的任何一个都可以。我找到的最快的是一个名为Spark的旧实用程序,即使在10.8.4版中,它仍然可以奇迹般地运行。不要问我,因为它是上次开发的敌人10.4!火花可以在这里找到- 火花

除此之外,我还解决了GUI命令有时运行缓慢的问题,方法是捆绑在cocoaDialog中,并在应用程序运行时在屏幕中间显示一个小的浮动气泡(表示正在发生锁定屏幕)时首先调用它。通常,锁定是在锁定之后立即进行的,但是如果有延迟,则至少会产生一些视觉上的“反馈”,即您按下了右键。我还实现了自我修复-如果未启用“启用对辅助设备的访问”,则会通过对话框提醒您,并立即将其启用。这也将确保在菜单栏中显示“钥匙串访问菜单”,因为这是必需的,否则GUI脚本编写将失败。


-2

Ctrl- - Shift⏏ Eject老的Mac上)
Ctrl- - Shift⌽ Power较新的Mac电脑)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.