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

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

Часть 1

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

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

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

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

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


Часть 2

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

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

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

1 ответ

Решение

Часть 1

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

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

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

  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. Помните, что это убийство не вызывает 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 может удобно располагаться на правой половине экрана, и окна рисунков не перекрывают его (что они и делают по умолчанию).


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

Другие вопросы по тегам