Восстановите настройки MATLAB на компьютере, который их не хранит, например, на рабочих компьютерах с ограниченными разрешениями.

2067
Erik

У меня два вопроса (и ответы на них). Я мог бы сделать два отдельных вопроса и ответы на них, но я не буду, потому что второй вопрос такой же, как первый, но с изюминкой. Две части ответа, которые я публикую ниже, решают обе части вопроса. Поэтому я решил оставить это в одном вопросе.

Часть 1

Изменение стандартного макета MATLAB

По умолчанию макет MATLAB (при первом запуске) является ИМХО весьма недружественным для пользователя. Это может быть хорошо для новичков, но суперпользователи (как вы и я) не хотят постоянно видеть некоторые элементы окна MATLAB (называемые рабочим столом). Вот как по умолчанию выглядит MATLAB R2014a (и в основном более новые версии):

enter image description here

Посмотрим, что с ним не так, ИМХО

  1. Окно не расположено правильно: оно не использует полный экран, и при этом оно не использует практическую часть (например, левую, верхнюю, нижнюю или правую половину) экрана. Давайте это исправим.
  2. Лента (верхняя часть окна MATLAB, содержащая вкладки «Домой», «Графики» и «Приложения») развернута, что мне больше всего не нужно. Поэтому я хочу свернуть его, чтобы сохранить некоторые свойства экрана .
  3. Панель «Текущая папка» слева развернута, в которой я не нуждаюсь большую часть времени, но если она развернута, то там большую часть времени. Поэтому большую часть времени он использует драгоценный экран, например ленту.
  4. Правая панель, Рабочая область, очень полезна, если вы выполняете вычисления непосредственно в Командном окне (средняя панель), и вам необходимо отслеживать, какие у вас переменные и т. Д. Однако во время написания или написания функций с использованием редактора (не отображается). в окне по умолчанию). Вам не нужно так много Workspace, потому что ваши переменные могут быть довольно абстрактными. Хотя отладка Workspace может быть удобной, но я обычно ее свертываю, чтобы сохранить больше экранного состояния. Вместо рабочей области я использую whosкоманду в окне команд, чтобы вывести список всех моих переменных. Совет от профессионала: для перечисления всех переменных, начинающихся, например, с «х», используйте whos x*.
  5. «Новичок в MATLAB? ... подсказка в верхней части окна командной строки меня раздражает, потому что я абсолютно не новичок в MATLAB. Подобные жёлтые подсказки появляются, когда вы открываете другие панели или окна.
  6. Текущая папка (отличающаяся для всех по умолчанию MATLAB) не является практической папкой. Я хочу, чтобы по умолчанию это была папка, в которой я на самом деле храню свою работу.

Возможно, есть еще вещи, которые вы или я не хотели бы или хотели бы изменить, но давайте исправим эти шесть проблем, см. Часть 1 моего ответа ниже для моего решения.


Часть 2

Сохранение пользовательских настроек на компьютерах, которые их сбрасывают

Дополнительная проблема, с которой я столкнулся, была не решена в части 1 моего ответа. Я полагаю, что проблема возникает с большим количеством людей, которые используют MATLAB на компьютере, администратором которого они не являются, то есть у них, возможно, нет повышенных разрешений. Это означает, что они не могут редактировать настройки системы и, возможно, не могут редактировать настройки MATLAB, как это происходит в моем случае. Я использую MATLAB на рабочем компьютере на очень большом рабочем месте. Каждый компьютер имеет виртуальное рабочее пространство, в которое пользователи входят. Большинство дисков являются виртуальными: каталог установки MATLAB находится на одном из этих дисков. Через Windows Explorer я даже не вижу диск! Кроме того, ярлык MATLAB указывает на другую программу, которую мое рабочее место использует для вызова любого программного обеспечения, на которое у пользователя есть лицензия, а не непосредственно на MATLAB.exe в папке установки MATLAB. Тем не мение,matlabroot,

Проблема, с которой я столкнулся после установки своего рабочего стола MATLAB так, как мне нравилось (см. Скриншот в моем ответе ниже), заключалась в том, что после каждой перезагрузки макет возвращался к недружественному макету по умолчанию. Я перезагружаюсь, по крайней мере, один раз в день, так что это означает, что мои настройки MATLAB и макет сбрасываются каждый раз. Это может быть не проблемой для вас, но для суперпользователя, который использует некоторые пользовательские настройки, макеты и т. Д., Это проблема. Я решил это во второй части моего ответа, см. Ниже.

0

1 ответ на вопрос

0
Erik

Часть 1

Изменение стандартного макета MATLAB

Мы решили шесть перечисленных проблем, изменив макет рабочего стола на тот, который нам больше нравится. Я использую макет, который выглядит так по умолчанию:

Default MATLAB window on first start up

Давайте воспроизведем это.

  1. Просто перетащите главное окно MATLAB туда, где вы хотите, например, разверните его. Решено!
  2. Нажмите на значок стрелки прямо под красным выходом ×в верхнем правом углу окна MATLAB, чтобы свернуть ленту. Решено!
  3. Перетащите заголовок панели «Текущая папка» (той части, где написано «Текущая папка») в нужное место. Вы можете положить его практически в любом месте. При перетаскивании вы видите тень панели, где она будет расположена, когда вы отпустите кнопку мыши. Вы можете расположить панель в другом месте или перетащить ее в верхний левый, левый верхний, правый верхний, верхний, нижний или любой другой заголовок другой панели, чтобы создать панель текущей папки с вкладками, которая по умолчанию закрыта. MATLAB называет это минимизированным. Когда панель свернута, она занимает гораздо меньше места и может быть открыта, нажав на вкладку или наведя курсор мыши на вкладку. Другое решение - полностью закрыть панель, удалив ее с рабочего стола MATLAB. Это можно сделать, сначала отсоединив панель, щелкнув правой кнопкой мыши заголовок → щелкните «Отменить» (или нажмите Ctrl+ Shift+U). Это открывает панель в отдельном окне. Закройте окно, и оно исчезнет. Если вы случайно потеряли подобное окно, вы можете восстановить его с помощью вкладки «Главная» главной ленты → нажмите «Макет» → снова включить текущую папку. Чтобы снова закрепить окно, нажмите на крошечную стрелку в верхнем правом углу окна панели → щелкните Dock (или нажмите Ctrl+ Shift+ D). Я поместил текущую папку в левую верхнюю вкладку.
  4. Я поместил Рабочую область рядом с вкладкой Текущая папка. Решено!
  5. Просто нажмите ×справа на панели желтого наконечника.
  6. Выберите папку, которую вы хотите использовать по умолчанию, и перейдите к ней, используя панель «Текущая папка» или адресную строку (на скриншоте выше, это выпадающий список прямо под лентой с надписью ► C: ►). Чтобы установить его как путь по умолчанию, сначала скопируйте адрес. Я считаю, что в версиях MATLAB начиная с R2014b вы можете установить текущую папку по умолчанию в настройках MATLAB (найдите ее на вкладке Главная ленты → Настройки → Общие настройки → Начальная рабочая папка). Если у вас более старая версия, вы можете установить текущую папку MATLAB по умолчанию с помощью userpath(newpath)команды, в которой newpath - это скопированный вами путь. Обратите внимание, что это newpathдолжна быть строка, т. Е. Заключенная в нее 'single straight apostrophes', а не «двойные апострофы», которые вы могли скопировать. Решено!

История команд (доступ к которой осуществляется нажатием в окне команд) и редактор (нажмите Ctrl+ Nв окне команд, чтобы открыть ее) также были перемещены.

Рекомендуется сохранить этот макет, чтобы вы могли легко переключиться на него, если что-то или кто-то изменилось (например, когда несколько пользователей используют один и тот же MATLAB с разными макетами). Сделайте это с помощью вкладки «Главная» ленты → Макет → Сохранить макет → присвойте своему макету имя. Он сохраняется в виде XML-файла <your layout name>MATLABLayout.xml, который вызывается в каталоге настроек MATLAB, который вы можете найти с помощью prefdirкоманды. Все настройки MATLAB, история команд, макет по умолчанию и т. Д. Хранятся в этом каталоге. Это очень полезные знания для второй части этого ответа!

Большинство (если не все) другие предпочтения также хранятся там.


Теперь вторая часть моего ответа, которая отвечает на часть 2 моего вопроса.

Часть 2

Сохранение пользовательских настроек на компьютерах, которые их сбрасывают

Прежде всего: примените все свои пользовательские настройки и сохраните макет для желаемого рабочего стола MATLAB, как описано в части 1 этого ответа.

Теперь мы будем ловко использовать startup.m, finish.mи несколько .bat файлов.

startup.mэто файл, который, если он присутствует в пути MATLAB, запускается при запуске, прежде чем вы получите контроль над окном MATLAB. Этот файл представляет собой скрипт, который можно использовать для любых действий. Мы установим его так, чтобы:

  1. Установите текущую папку в любой каталог, который мы хотим после запуска.
  2. Замените настройки MATLAB по умолчанию нашими собственными, сохраненными в части 1 этого ответа.
  3. Восстановите наш собственный макет рабочего стола MATLAB.

Первые два шага самые простые. В моем случае (на моем рабочем компьютере) путь по умолчанию просто забывался при каждом перезапуске компьютера. Поэтому я сделал скрипт startup.mи поместил в него следующий код.

(это входит в startup.m)

%% set path p = 'C:\Whatever\path\you\want\as\your\default\Current Folder'; cd(p) 

Достаточно просто. Замените pна любой путь к текущей папке, которую вы хотите.

Второй шаг сложнее. Это требует как сохранения, так и восстановления всех настроек в каталоге предпочтений MATLAB, который можно найти с помощью prefdirкоманды. Для этого мы также используем finish.m. Это скрипт, который автоматически запускается перед выходом из MATLAB. Выйти из MATLAB можно несколькими способами: щелкнуть ×по главному окну MATLAB или воспользоваться командой exitили quit. Полезно знать: если вы убьете MATLAB.exe с помощью диспетчера задач Windows или с помощью другой системной команды, которая убивает процесс, finish.mне запустится. Убедитесь, что finish.mуказан путь к MATLAB, или добавьте путь к нему в путь MATLAB, используя addpathприведенный выше фрагмент кода для startup.m. В противном случае finish.mне будет работать при выходе из MATLAB.

Мы finish.mскопируем все настройки, которые вы могли установить или изменить, а также ваши собственные макеты в папку, к которой у вас есть разрешения. Следующий код делает это.

(это входит в finish.m)

%% backup MATLAB preferences, etc., see also: startup.m p = 'path\to\your\preference backup folder'; copyfile([prefdir filesep '*'], p, 'f') 

Это копирует все файлы в каталоге предпочтений MATLAB в выбранную вами резервную папку. Теперь скажем, startup.mчтобы восстановить эти файлы. Поскольку он startup.mзапускается раньше всего, он прекрасно восстанавливает все настройки, которые нам могут понадобиться. Следующий код делает это для нас.

(это входит в startup.m)

%% restore MATLAB preferences, etc., see also: finish.m p = 'path\to\your\preference backup folder'; % end without a file separator, i.e. '/', '\' or filesep copyfile([p filesep '*'], prefdir, 'f') 

В этом фрагменте кода pдолжен быть указан тот же каталог, что и pв finish.m, так что MATLAB знает, куда скопировать файл.

Третий пункт в нашем списке - самый сложный. Простого копирования <your layout name>MATLABLayout.xmlфайла с использованием предыдущего фрагмента кода в каталог настроек MATLAB недостаточно для восстановления макета. Вам необходимо восстановить его программно. Кроме того, в моей ситуации MATLAB требовал перезапуска перед применением макета. Это будет сделано с помощью следующих шагов.

Я нашел метод на недокументированном сайте MATLAB, который описывает многие функции MATLAB, которые не документированы и не поддерживаются разработчиками MATLAB. Они не просты в использовании и могут вести себя странно, но они могут делать очень мощные вещи.

Следующий код восстанавливает макет, который вы ранее сохранили как <your layout name>MATLABLayout.xml.

(это входит в startup.m)

%% restore your custom layout layoutName = '<your layout name>'; desktop = com.mathworks.mde.desk.MLDesktop.getInstance; desktop.restoreLayout(layoutName); 

Установите layoutNameна то, что вы назвали свой макет. Теперь к перезапускаемой части MATLAB.

Помните, что настройки MATLAB сбрасываются при каждой перезагрузке компьютера на рабочем месте. Путь к MATLAB по умолчанию (который можно найти с помощью pathкоманды) включает только каталоги, в которые у меня нет прав на запись. Это означает, что я не могу поставить startup.mи finish.mна путь MATLAB, так что после перезагрузки они все еще там. Как мне это решить? Я использую аккуратный трюк командной строки MATLAB.exe, чтобы скопировать startup.mв папку по пути MATLAB, а затем запускаю startup.mвручную.

Ярлык для MATLAB в моем меню «Пуск» также сбрасывается после перезагрузки, поэтому я использую файл .bat на рабочем столе для запуска MATLAB следующим образом.

(это MATLAB.batможно сделать в любом месте, к которому у вас есть легкий доступ, например на рабочем столе Windows или в личной папке)

@echo off start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot), startup" 

Это запустит MATLAB. Более того, он -rговорит MATLAB запускать все, что будет дальше, между «двойными апострофами» после того, как он завершил запуск (даже после запуска startup.m, если он существовал, что не так в моей ситуации). Часть между апострофами - это код MATLAB, который говорит MATLAB скопировать startup.mсозданный нами скрипт в место в пути MATLAB, в данном случае matlabroot. Это может быть любой другой каталог по умолчанию пути MATLAB, или вы можете использовать, addpath('path\to\add')чтобы добавить любой путь к пути MATLAB. Это может добавить путь к нашему startup.m. Последняя команда между апострофами - это просто вызов startup.m, поэтому она выполняется.

Теперь скрипт установит желаемый путь, настройки и макет. Одна проблема все еще сохраняется: MATLAB требуется перезагрузка, чтобы фактически изменить макет. Это делается с помощью startup.m, finish.mа второй файл .bat.

Второй файл .bat уничтожит MATLAB через командную строку и снова запустит MATLAB. startup.mдолжен знать, что он был сначала запущен, а затем запустите этот файл .bat. finish.mдолжны очистить это знание. Вот что я сделал.

(это входит в restartup.bat)

@echo off taskkill /f /pid %1 start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot)" 

Как видите, taskkillубьет процесс с неизвестным ( %1) идентификатором процесса ( /pid). Этот идентификатор будет предоставлен при вызове этого файла .bat startup.m. Однако этот вызов не должен произойти, если MATLAB уже был перезапущен для восстановления макета и настроек. Поэтому startup.mнеобходимо создать память о том, что он уже запущен. Я сделал это следующим образом.

(это входит в startup.m)

%% if startup hasn't run before, restart MATLAB % sources: % http://www.mathworks.com/matlabcentral/newsreader/view_thread/259557 % https://stackoverflow.com/a/92057  % this file is deleted by finish.m name = 'hasStartedUp'; f = ['path\to\' name]; if ~exist(f,'file') fid = fopen(f,'wt'); % create an empty file fclose(fid); pid = num2str(feature('getpid')); % get MATLAB's process ID system(['path\to\restartup.bat ' pid]); % run restartup.bat end 

Память, которую я дал, startup.mпредставляет собой файл, который, если он существует, предотвращает перезапуск MATLAB. Этот файл называется name. Текущий идентификатор процесса MATLAB получается с помощью num2str(feature('getpid')). Это, в свою очередь, передается вызову restartup.bat, который, в свою очередь, убивает процесс MATLAB. Помните, что kill не вызывает finish.m, поэтому мы удаляем файл памяти в этом сценарии, поэтому, если MATLAB завершается нормально, файл памяти исчезает, и MATLAB знает, что перезапустить при следующем запуске.

(это входит в finish.m)

%% delete memory file from startup.m f = 'path\to\hasStartedUp'; if exist(f,'file') delete(f) end 

Бонус за долгое чтение: прочитайте здесь, как я отредактировал, startup.mчтобы открыть цифры по умолчанию в левой половине экрана. Теперь главное окно MATLAB может удобно располагаться на правой половине экрана, и окна рисунков не перекрывают его (что они и делают по умолчанию).


Теперь я решил и поэтому ответил на два моих вопроса! Я понимаю, что это довольно сложный ответ и, следовательно, трудное чтение, поэтому не стесняйтесь задавать любые вопросы и оставлять комментарии с предложениями с дальнейшим улучшением моих методов.

Похожие вопросы