Я пытаюсь выяснить, существует ли какая-либо эквивалентная однострочная командная строка, которая точно воспроизводит идентичную функциональность пункта меню «Блокировка экрана», доступного через приложение «Связка ключей» в OS X 10.6.
Я знаю обо всех «обычных» решениях (предпочтения сна/экранной заставки для запроса пароля при повторной активации), но они мне не подходят.
Я также знаю этот вариант:
/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend
что мне тоже не подходит.
Идеальная функциональность — это опция «Блокировка экрана», однако я еще не нашел элегантного способа назвать ее.
На данный момент я звоню через Automator, что не элегантно!
Я много читал об этой проблеме, и я понимаю, что никто еще не нашел «святой Грааль», но мне было интересно, могло ли это измениться.
В OS X 10.9 и более поздних версиях:
pmset displaysleepnow
Сама по себе эта команда только переводит дисплей в спящий режим, что приводит к черному экрану. Настроив компьютер на запрос пароля сразу после сна, эта однострочная команда работает как команда «заблокировать компьютер». Предпочтение доступно в Системных настройках > Безопасность и конфиденциальность > Общие .
Источник: Как заблокировать экран на MacBook Air?
Screen Lock
( System Preferences > Security & Privacy > Require password...
). И, конечно же, вы не можете добраться до Screen Lock
состояния, если вы его выключили. В остальном он работает отлично и намного быстрее, чем глупо размещенный пункт меню «Связка ключей».pmset displaysleepnow
— гораздо лучшее решение, чем борьба за выход из системы.Примечание. Это решение уникально тем, что оно использует функцию состояния строки меню Keychain Access, но не требует включения этого 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
instance method '-_lockScreenMenuHit:' not found
, но тем не менее приложение блокировки экрана работает. Однако при двойном щелчке открывается окно терминала до блокировки экрана. После разблокировки вы должны закрыть окно вручную. Есть ли способ закрыть это окно автоматически?Я использую Альфреда →
Универсальная горячая клавиша позволяет мне активировать ее с помощью клавиатуры.
ОБНОВЛЕНИЕ: 2019.
Экран блокировки для связки ключей больше не доступен в текущей версии MacOS Mojave & High Sierra.
Apple теперь добавила пункт меню блокировки экрана в меню Apple. Это сочетание клавиш по умолчанию crtl + cmd + Q
------------- Старый ответ для предыдущей ОС ниже --------------
Ответ @Bart Arondson заключается в использовании некоторых кодов клавиш для навигации по меню экрана блокировки связки ключей.
Все коды клавиш можно обойти с помощью сценариев графического интерфейса пользователя, чтобы напрямую попасть в пункты меню.
Использование кодов клавиш для навигации по меню может быть случайным. И как бы мне не нравились GUI-скрипты, потому что они тоже могут попасться и промахнуться, имхо, в этом случае меньше попаданий и промахов.
Этот код applescript: (обновлено 18.05.2016, получено из Использование 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 «Запустить Applescript» в рабочем процессе службы Automator.
Затем вы даете службе сочетание клавиш. Как обычно в «Сочетаниях клавиш».
Обслуживание:
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")
Легкий псевдоним. Добавьте это в свой bashrc
alias afk="osascript -e 'tell application \"System Events\" to keystroke \"q\" using {command down,control down}'"
введите afk
свой терминал для выполнения.
Установите настройки для блокировки экрана, когда активна заставка.
Затем вы можете использовать эту команду терминала для запуска хранителя экрана.
/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine
Насколько я могу судить, это именно то, что делает пункт меню «Связка ключей».
Я думаю, что ответ на ваш вопрос: «Нет, для этого нет командной строки».
Поскольку это элемент строки меню, к нему нельзя легко получить доступ с помощью Keyboard Maestro или другого подобного инструмента.
Однако, если вы не против решения с использованием стороннего приложения, QuickLock позволит вам это сделать.
Это бесплатное (принимаются пожертвования) приложение, которое позволит вам назначить сочетание клавиш для блокировки экрана. Также есть пункт в строке меню, щелкнув который, можно заблокировать экран.
Приложение позволит вам установить пароль (отдельно от пароля вашей учетной записи).
Он не требует использования пароля с заставкой, это все совершенно отдельно.
Вы можете посмотреть видео в действии по адресу http://www.youtube.com/watch?v=SBHwykPB19o .
PS когда экран заблокирован, введите свой пароль, чтобы разблокировать его. Я был сбит с толку, потому что ожидал увидеть поле пароля. Здесь ничего нет. Вы просто вводите пароль.
pps Я использовал это всего несколько минут, поэтому могут быть какие-то другие проблемы с ним, о которых я не знаю, но, похоже, он отвечает всем требованиям.
Mac не предназначен для предоставления вам такой возможности. Однако в этой статье объясняется обходной путь с помощью QuickSilver. Хотя я не могу понять, почему вам не нравится решение, которое Apple предоставляет изначально, я желаю вам удачи в поиске решения.
Быстрый способ перевести компьютер в спящий режим через командную строку с помощью AppleScript:
osascript -e 'tell application "Finder" to sleep'
Это не блокирует ваш экран, если вы не настроили его на немедленный запрос пароля, что мне не нравится делать. Я просто отмечаю это для потомков.
Я использовал код, опубликованный выше jnk. Затем я использовал appify, чтобы превратить его в приложение для OS X, mathiasbynens.be/notes/shell-script-mac-apps . Затем я использовал Quicksilver, чтобы назначить собственное сочетание клавиш (я выбрал cmd+L). Терминал не открывается/не остается открытым (как некоторые беспокоились) из-за того, как я его настроил, потому что вместо этого я запускаю приложение OS X.
Я также столкнулся с этой проблемой. /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;
}
Это сохраняет пользователю его собственные настройки, но надежно блокирует экран :)
defaults write com.apple.screensaver askForPassword -bool TRUE
и defaults write com.apple.screensaver askForPasswordDelay -int 10
это мои значения по умолчанию. Теперь приведенный выше скрипт будет вести себя так, как описано.В 10.14.6 Мохаве я запускаю механизм заставки с помощью этой команды:
/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine
Редактировать: убедитесь, что вы установили настройки для блокировки экрана, когда заставка активна в системных настройках и требует немедленного ввода пароля.
Я использую BetterTouchTool для этой цели и назначил сочетание клавиш для «Переключиться на экран входа в систему» (который является экраном блокировки): не выполняет требования командной строки, но в любом случае может быть вам полезен.
Я не совсем уверен, что понимаю вашу проблему здесь. Если вам требуется пароль на заставке, он не остановит запуск процессов и не заблокирует удаленный доступ к вашему Mac. У меня установлен этот параметр (используя ControlPlane, чтобы активировать его на работе и деактивировать дома), и у меня ни разу не было, чтобы система отказывалась отвечать на подключение к удаленному рабочему столу, VNC или SSH. Во всех случаях, когда требуется доступ к графическому интерфейсу, мне просто нужно ввести пароль; SSH использует пару ключей, поэтому пароль не запрашивается. Если вы не хотите, чтобы приложения переходили в спящий режим, убедитесь, что настройки питания системы таковы, что они не перейдут в спящий режим до вашего возвращения. Просто установите тайм-аут сна на большую задержку. Если вы просто не хотите заморачиваться вводом пароля, когда сидите перед компьютером и работаете,
Я использую ctrl-shift-eject для блокировки экрана. Это быстро, просто и работает. Это встроенный способ блокировки экрана. Никто, скорее всего, не предложит альтернативу просто потому, что копирование функций, уже встроенных в ОС, слишком избыточно, чтобы тратить на это много времени.
Насколько я могу судить, в связке ключей в 10.8 в любом случае нет опции «экран блокировки», поэтому предпочитаемое вами решение не будет существовать, если вы когда-либо обновитесь. Изменить: не заметил этого в настройках Keychain; да, он все еще есть в 10.8.
Если вы используете для этого Automator, не можете ли вы просто упаковать скрипт как приложение и назначить комбинацию горячих клавиш или оставить его в доке для быстрого доступа?
Как и автор вопроса, я искал способ быстро использовать экран блокировки связки ключей.
Объединив знания из старой подсказки Mac OS X и немного Applescript, я пришел к следующему:
Сначала выполните шаги из связанной подсказки 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 могут случайно активировать горячий угол, что приведет к блокировке экрана. Я также иногда случайно попадал в горячую точку, что значительно тормозило мой рабочий процесс.
Сторонние приложения Все это хорошо, но зачем запускать стороннее приложение, если оно изначально доступно в ОС?
По состоянию на 2021 год я считаю следующее решение «наиболее близким к правильному»:
Как указано в ответе markhunte, в меню Apple есть запись для запуска «Экран блокировки» с помощью сочетания клавиш:controlcommandQ
Поэтому я имитирую нажатие этой комбинации клавиш:
osascript -e 'tell application "System Events" to keystroke "q" using {control down, command down}'
Плюсы:
Изменить: я только что увидел, что ответ Аритро Пола уже содержит эту команду (в виде псевдонима). Надеюсь, моя разработка окажется полезной.
Я использую настройку пароля заставки с помощью нажатия клавиши (Ctrl + Shift + Eject) в 10.6.8, и, насколько я вижу, она делает то же самое, что и элемент «Блокировка экрана» на значке панели задач «Связка ключей».
Я знаю, что это похоже на некоторые другие ответы, но вместо «горячего угла» используется нажатие клавиши, что мне удобнее.
Более подробно это решение описано здесь, вот откуда я его взял: http://osxdaily.com/2011/01/17/lock-screen-mac/
Пользуемся этим уже несколько лет без проблем.
Ну, просто объедините два из приведенных выше ответов. Запустите эту команду:
open -a /System/Library/Frameworks/ScreenSaver.framework//Versions/A/Resources/ScreenSaverEngine.app
После настройки параметров безопасности и конфиденциальности немедленно запрашивать пароль. Создайте псевдоним для своей оболочки, если хотите упростить выполнение команды.
FWIW, я понимаю вашу ситуацию и сам искал хорошее решение. Я наткнулся на эту тему, потому что искал несколько более быстрый метод, чем тот, который я в конце концов придумал. Я придумал то, что, хотя и не совсем то, на что я надеялся, работает и является приемлемым компромиссом. Я использую тот же тип команд сценариев графического интерфейса, что и @markhunte (немного другая структура, но та же идея), но вместо того, чтобы просто поместить все это в рабочий процесс службы Automator, я разделил его на пакет .app, созданный с Platypus. Я сделал это, потому что в своих путешествиях и тестировании я обнаружил, что службы Automator работают очень медленно при определенных условиях. Если ваш Mac подвергается какой-либо нагрузке, например, выполняется сканирование диска, какие-либо действия программного обеспечения для аудио/видео, Mail загружает электронную почту и т. д., ОС, похоже, отодвигает службы на задний план. Это приводит к тому, что до запуска рабочего процесса требуется несколько секунд (иногда), а иногда даже несколько секунд до запуска команд графического интерфейса в службе. Довольно раздражает, если вы пытаетесь «быстро» заблокировать экран, и это занимает 10 секунд!
Наличие автономного «приложения» также имеет то преимущество, что вы можете использовать буквально десятки различных сторонних приложений для его запуска или просто использовать Spotlight или службу Automator для запуска приложения. Любой из них работает. Самое быстрое, что я нашел, это старая утилита под названием Spark, которая чудесным образом все еще работает даже в 10.8.4. Не спрашивайте меня, как, поскольку последний раз он был разработан для версии 10.4! Spark можно найти здесь - Spark
В дополнение ко всему этому, я боролся с проблемой того, что команды графического интерфейса иногда работают медленно, связывая его сcocoDialog и вызывая его первым, когда приложение запускается, чтобы показать небольшой плавающий пузырь в середине экрана, указывающий, что происходит блокировка экрана. Обычно блокировка происходит сразу после, но если есть задержка, то это хотя бы дает некую визуальную «отдачу» о том, что вы нажали правильные клавиши. Я также сделал его самовосстанавливающимся — если «Включить доступ к вспомогательным устройствам» не включено, он предупреждает вас в диалоговом окне и позволяет сразу же включить его. Это также гарантирует, что меню доступа к цепочке ключей отображается в строке меню, так как это требование или сценарий графического интерфейса пользователя полностью терпит неудачу.
Ctrl- Shift- ⏏ Eject(на старых компьютерах Mac),
Ctrl- Shift- ⌽ Power(на новых компьютерах Mac)
Матье Риглер
пользователь40433
Ɱарк Ƭ
пользователь40433
Тайлер Мамфорд
пользователь40433
дстарх
пользователь44136
роджерпак