Stellen Sie die MATLAB-Einstellungen auf einem Computer wieder her, auf dem sie nicht gespeichert sind, z. B. Arbeitscomputer mit eingeschränkten Berechtigungen

2134
Erik

Ich habe zwei Fragen (und Antworten darauf). Ich könnte zwei getrennte Fragen und Antworten daraus stellen, aber ich werde es nicht tun, weil die zweite Frage die gleiche ist wie die erste, aber mit einer Wendung. Die beiden Teile der Antwort, die ich unten schreibe, lösen beide Teile der Frage. Also habe ich mich dazu entschieden, dies nur eine Frage und Antwort zu halten.

Teil 1

Ändern des Standardlayouts von MATLAB

Das Standardlayout von MATLAB (beim ersten Start) ist IMHO ziemlich benutzerunfreundlich. Es ist zwar für Anfänger in Ordnung, aber Superuser (wie Sie und ich) möchten einige der Elemente des MATLAB-Fensters (Desktop genannt) nicht dauerhaft sehen. So sieht MATLAB R2014a (und meistens auch die neueren Versionen) standardmäßig aus:

enter image description here

Mal sehen, was daran falsch ist, IMHO:

  1. Das Fenster ist nicht gut positioniert: Es verwendet nicht den gesamten Bildschirm und auch keinen praktischen Bruchteil (z. B. die linke, obere, untere oder rechte Hälfte) des Bildschirms. Lass uns das reparieren.
  2. Das Menüband (der obere Teil im MATLAB-Fenster mit den Registerkarten Start, Diagramme und Apps) ist erweitert, was ich meistens nicht benötige. Also möchte ich es zusammenfalten, um etwas Bildschirmfläche zu retten .
  3. Das Fenster "Aktueller Ordner" links ist erweitert, was ich meistens nicht benötige, aber wenn es erweitert wird, ist es meistens vorhanden. Daher verwendet es meistens kostbare Bildschirmseiten, wie das Farbband.
  4. Der rechte Bereich, der Arbeitsbereich, ist sehr nützlich, wenn Sie Berechnungen direkt im Befehlsfenster (mittlerer Bereich) durchführen und den Überblick über Ihre Variablen behalten müssen. Wenn Sie jedoch Skriptfunktionen verwenden oder mit dem Editor schreiben (nicht sichtbar) im Standardfenster). Sie benötigen den Arbeitsbereich nicht so sehr, da Ihre Variablen sehr abstrakt sein können. Beim Debuggen ist der Arbeitsbereich zwar möglicherweise hilfreich, aber ich füge ihn normalerweise zusammen, um mehr Bildschirmfläche zu sparen. Anstelle des Arbeitsbereichs verwende ich den whosBefehl im Befehlsfenster, um alle meine Variablen aufzulisten. Pro-Tipp: Um alle Variablen aufzulisten, die zB mit einem 'x' beginnen, verwenden Sie whos x*.
  5. Das "Neu bei MATLAB?" ... 'Tipp am oberen Rand des Befehlsfensters ärgert mich, weil ich absolut nicht neu bei MATLAB bin. Weitere gelbe Tipps wie diese gibt es, wenn Sie andere Fenster oder Fenster öffnen.
  6. Der aktuelle Ordner (für jeden Standard-MATLAB unterschiedlich) ist kein praktischer Ordner. Ich möchte, dass der Ordner standardmäßig in dem Ordner gespeichert wird, in dem ich meine Arbeit tatsächlich ablege.

Es gibt wahrscheinlich mehr oder weniger Dinge, die Sie mögen oder die Sie nicht ändern möchten, aber beheben Sie diese sechs Probleme. Siehe unter Teil 1 meiner Antwort weiter unten.


Teil 2

Die benutzerdefinierten Einstellungen bleiben auf Computern erhalten, auf denen sie zurückgesetzt werden

Ein zusätzliches Problem, auf das ich bei den obigen Problemen gestoßen bin, wurde durch Teil 1 meiner Antwort nicht gelöst. Ich denke, das Problem tritt bei mehr Leuten auf, die MATLAB auf einem Computer verwenden, dessen Administrator sie nicht sind, dh sie verfügen möglicherweise nicht über erhöhte Berechtigungen. Das bedeutet, dass sie keine Systemeinstellungen bearbeiten können und möglicherweise auch keine Einstellungen von MATLAB, wie in meinem Fall. Ich verwende MATLAB auf einem Arbeitscomputer an einem sehr großen Arbeitsplatz. Jeder Computer verfügt über einen virtuellen Arbeitsbereich, an dem sich Benutzer anmelden. Die meisten Laufwerke sind virtuell: Das Installationsverzeichnis von MATLAB befindet sich auf einem dieser Laufwerke. Durch Windows Explorer kann ich das Laufwerk nicht einmal sehen! Darüber hinaus verweist die Verknüpfung zu MATLAB auf ein anderes Programm, das mein Arbeitsplatz zum Aufrufen von Software verwendet, für die der Benutzer eine Lizenz besitzt, und nicht direkt auf MATLAB.exe im MATLAB-Installationsordner. Jedoch,matlabroot.

Das Problem, das ich hatte, nachdem ich meinen MATLAB-Desktop so eingestellt hatte, wie ich es mochte (siehe den Screenshot in meiner Antwort unten), war, dass das Layout nach jedem Neustart auf das unfreundliche Standardlayout zurückgesetzt wurde. Ich starte mindestens einmal pro Tag neu. Dies bedeutet, dass meine MATLAB-Einstellungen und das Layout jedes Mal neu eingestellt werden. Dies ist möglicherweise kein Problem für Sie, aber für einen Superbenutzer, der einige benutzerdefinierte Einstellungen, Layouts usw. verwendet, ist dies ein Problem. Ich habe es in Teil 2 meiner Antwort gelöst, siehe unten.

0

1 Antwort auf die Frage

0
Erik

Teil 1

Ändern des Standardlayouts von MATLAB

Wir lösen die sechs aufgelisteten Probleme, indem wir das Desktop-Layout nach Belieben ändern. Ich benutze ein Layout, das standardmäßig so aussieht:

Default MATLAB window on first start up

Lass uns das reproduzieren.

  1. Ziehen Sie einfach das Hauptfenster von MATLAB an die gewünschte Stelle, z. B. um es zu maximieren. Gelöst!
  2. Klicken Sie auf das Pfeilsymbol rechts unter dem roten Ausgang ×in der oberen rechten Ecke des MATLAB-Fensters, um das Menüband zu reduzieren. Gelöst!
  3. Ziehen Sie den Titel des Fensters "Aktueller Ordner" (den Teil, in dem "Aktueller Ordner" heißt) an die gewünschte Stelle. Sie können es fast überall platzieren. Während des Ziehens sehen Sie den Schatten des Bereichs, in dem er positioniert wird, wenn Sie die Maustaste loslassen. Sie können den Bereich an einer anderen Stelle positionieren oder ihn nach oben links, links oben, rechts oben, oben, unten oder in einen anderen Titel des Fensters ziehen, um den Registerkartenbereich Aktueller Ordner zu erstellen, der standardmäßig geschlossen ist. MATLAB nennt dies minimiert. Wenn ein Bereich minimiert wird, nimmt er viel weniger Platz in Anspruch und kann geöffnet werden, indem Sie entweder auf die Registerkarte klicken oder die Maus über die Registerkarte bewegen. Eine andere Lösung besteht darin, den Bereich vollständig zu schließen und ihn von Ihrem MATLAB-Desktop zu entfernen. Dazu können Sie zunächst den Bereich abdocken, indem Sie mit der rechten Maustaste auf den Titel klicken. Klicken Sie dann auf Abdocken (oder drücken Sie Ctrl+ Shift+)U). Dies öffnet den Bereich in einem separaten Fenster. Schließen Sie das Fenster und es wird verschwinden. Wenn Sie versehentlich ein Fenster wie dieses verloren haben, können Sie es über die Registerkarte Start des Hauptfensters wiederherstellen. Klicken Sie auf Layout, und aktivieren Sie den aktuellen Ordner erneut. Um das Fenster erneut anzudocken, klicken Sie auf den kleinen Pfeil in der oberen rechten Ecke des Fensterbereichs → klicken Sie auf Dock (oder drücken Sie Ctrl+ Shift+ D). Ich füge den aktuellen Ordner in einem Tab oben links ein.
  4. Ich lege den Arbeitsbereich neben die Registerkarte Aktueller Ordner. Gelöst!
  5. Klicken Sie einfach ×rechts in der Leiste der gelben Spitze auf.
  6. Wählen Sie einen Ordner aus, den Sie standardmäßig verwenden möchten, und navigieren Sie zu diesem Ordner. Verwenden Sie dazu entweder den Bereich "Aktueller Ordner" oder die Adressleiste (in der Abbildung oben ist die Dropdown-Liste direkt unter der Multifunktionsleiste zu sehen ► C: ►). Um dies als Standardpfad festzulegen, kopieren Sie zuerst die Adresse. Ich glaube, dass Sie in MATLAB-Versionen seit R2014b den aktuellen Standardordner in den MATLAB-Voreinstellungen festlegen können (finden Sie über die Multifunktionsleiste Registerkarte Start → Voreinstellungen → Allgemeine Voreinstellungen → Anfangsarbeitsordner). Wenn Sie eine ältere Version verwenden, können Sie den aktuellen Standardordner von MATLAB mit dem userpath(newpath)Befehl festlegen, in dem newpath der Pfad ist, den Sie kopiert haben. Beachten Sie, dass es newpathsich um einen String handeln sollte, dh umschlossen von 'single straight apostrophes', also nicht die "doppelten Apostrophe", die Sie möglicherweise kopiert haben. Gelöst!

Der Befehlsverlauf (Zugriff durch Drücken auf im Befehlsfenster) und der Editor (drücken Sie im Befehlsfenster Ctrl+ N, um ihn zu öffnen) wurden ebenfalls neu positioniert.

Es ist eine gute Idee, dieses Layout zu speichern, damit Sie leicht darauf zugreifen können, wenn sich etwas von jemandem oder jemandem geändert hat (z. B. wenn mehrere Benutzer dasselbe MATLAB mit unterschiedlichen Layouts verwenden). Gehen Sie dazu über die Multifunktionsleiste Registerkarte Start → Layout → Layout speichern → geben Sie Ihrem Layout einen Namen. Sie wird als .xml-Datei gespeichert, die <your layout name>MATLABLayout.xmlim MATLAB-Voreinstellungsverzeichnis aufgerufen wird, das Sie mit dem prefdirBefehl finden können. Alle Voreinstellungen, Befehlsverläufe, Standardlayout usw. von MATLAB werden in diesem Verzeichnis gespeichert. Dies ist ein sehr nützliches Wissen für den zweiten Teil dieser Antwort!

Die meisten (wenn nicht alle) anderen Einstellungen werden dort ebenfalls gespeichert.


Nun, der zweite Teil meiner Antwort, der den zweiten Teil meiner Frage beantwortet.

Teil 2

Die benutzerdefinierten Einstellungen bleiben auf Computern erhalten, auf denen sie zurückgesetzt werden

Vor allem: Wenden Sie alle Ihre benutzerdefinierten Einstellungen an und speichern Sie ein Layout für Ihren gewünschten MATLAB-Desktop, wie in Teil 1 dieser Antwort beschrieben.

Jetzt werden wir zu klug verwenden startup.m, finish.mund ein paar .bat - Dateien.

startup.mist eine Datei, die, wenn sie im MATLAB-Pfad vorhanden ist, beim Start ausgeführt wird, bevor Sie die Kontrolle über das MATLAB-Fenster erlangen. Diese Datei ist ein Skript, mit dem Sie alles tun können. Wir werden es so einstellen, dass es folgendes tut:

  1. Legen Sie für den aktuellen Ordner das gewünschte Verzeichnis nach dem Start fest.
  2. Überschreiben Sie die Standardeinstellungen von MATLAB mit unseren eigenen, wie in Teil 1 dieser Antwort gespeichert.
  3. Stellen Sie unser eigenes MATLAB-Desktoplayout wieder her.

Die ersten beiden Schritte sind die einfachsten. In meinem Fall (auf meinen Arbeitscomputern) wurde der Standardpfad bei jedem Neustart des Computers einfach vergessen. Also habe ich ein Skript erstellt startup.mund den folgenden Code eingefügt.

(das geht rein startup.m)

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

Leicht genug. Ersetzen pSie den aktuellen Ordner durch einen beliebigen Pfad.

Der zweite Schritt ist schwieriger. Es muss sowohl das Speichern als auch das Wiederherstellen aller Einstellungen im Voreinstellungsverzeichnis von MATLAB gespeichert werden, das mit dem prefdirBefehl gefunden werden kann . Dafür verwenden wir finish.mauch. Dies ist ein Skript, das automatisch ausgeführt wird, bevor MATLAB beendet wird. MATLAB kann auf verschiedene Arten beendet werden: Klicken Sie auf das ×Hauptfenster von MATLAB oder verwenden Sie den Befehl exitoder quit. Gut zu wissen: Wenn Sie MATLAB.exe über den Windows Task-Manager oder einen anderen Systembefehl, der den Prozess abbricht, beenden, finish.mwird dies nicht ausgeführt. Vergewissern Sie sich, dass finish.msich der Pfad im MATLAB-Pfad befindet, oder fügen Sie den Pfad zum MATLAB-Pfad hinzu. Verwenden Sie dazu den addpathobigen Codeausschnitt für startup.m. Andernfalls finish.mwird es nicht ausgeführt, wenn MATLAB beendet wird.

Wir werden finish.malle von Ihnen festgelegten oder geänderten Einstellungen und Ihre benutzerdefinierten Layouts in einen Ordner kopieren, für den Sie Berechtigungen haben. Der folgende Code tut dies.

(das geht rein finish.m)

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

Dadurch werden alle Dateien im MATLAB-Voreinstellungsverzeichnis in den Sicherungsordner Ihrer Wahl kopiert. Wir fordern nun startup.mauf, diese Dateien wiederherzustellen. Da es startup.mvor allen anderen ausgeführt wird, werden alle gewünschten Einstellungen wiederhergestellt. Der folgende Code macht das für uns.

(das geht rein 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') 

In diesem Code-Snippet pmuss dasselbe Verzeichnis wie pin festgelegt werden finish.m, sodass MATLAB weiß, von wo die Datei kopiert werden soll.

Der dritte Punkt auf unserer Liste ist der komplizierteste. Das einfache Kopieren der <your layout name>MATLABLayout.xmlDatei mit dem vorherigen Code-Snippet in das Einstellungsverzeichnis von MATLAB reicht nicht aus, um das Layout wiederherzustellen. Sie müssen es programmgesteuert wiederherstellen. Außerdem musste MATLAB in meiner Situation vor dem Anwenden des Layouts einen Neustart durchführen. Dies erfolgt mit den folgenden Schritten.

Ich habe eine Methode in undokumentiertem MATLAB gefunden, einer Website, auf der viele Funktionen von MATLAB beschrieben werden, die von den MATLAB-Entwicklern nicht dokumentiert oder unterstützt werden. Sie sind nicht einfach zu bedienen und können sich seltsam verhalten, aber sie können sehr mächtige Dinge tun.

Mit dem folgenden Code wird das Layout wiederhergestellt, unter dem Sie zuvor gespeichert hatten <your layout name>MATLABLayout.xml.

(das geht rein startup.m)

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

Legen Sie fest, layoutNamewie Sie Ihr Layout benannten. Nun zum neu gestarteten MATLAB-Teil.

Denken Sie daran, dass die Einstellungen von MATLAB bei jedem Neustart des Computers an meinem Arbeitsplatz zurückgesetzt werden. Der Standard-MATLAB-Pfad (der mit dem pathBefehl gefunden werden kann ) enthält nur Verzeichnisse, für die ich keine Schreibberechtigung habe. Das bedeutet, dass ich nicht setzen kann startup.mund finish.mdem MATLAB - Pfad auf, so dass nach einem Neustart sie noch da sind. Wie löse ich das? Ich verwende einen ordentlichen MATLAB.exe-Befehlszeilentrick, um startup.min einen Ordner im MATLAB-Pfad zu kopieren und dann startup.mmanuell auszuführen .

Die Verknüpfung zu MATLAB in meinem Startmenü wird auch nach einem Neustart zurückgesetzt. Daher verwende ich eine .bat-Datei auf meinem Desktop, um MATLAB wie folgt auszuführen.

(Dies geht in MATLAB.batden Ordner, der überall dort abgelegt werden kann, wo Sie einfachen Zugriff haben, z. B. auf den Windows-Desktop oder einen persönlichen Ordner)

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

Dadurch wird MATLAB ausgeführt. Außerdem weist das -rMATLAB an, nach dem Start des Startvorgangs das auszuführen, was als Nächstes zwischen den "doppelten Apostrophen" erscheint (auch nach dem Ausführen startup.m, falls vorhanden, was in meiner Situation nicht der Fall ist). Der Teil zwischen den Apostrophen ist MATLAB-Code, der MATLAB anweist, das von startup.muns erstellte Skript an eine Stelle im MATLAB-Pfad zu kopieren, in diesem Fall matlabroot. Dies kann ein beliebiges anderes Verzeichnis im Standard-MATLAB-Pfad sein, oder Sie können addpath('path\to\add')einen beliebigen Pfad zum MATLAB-Pfad hinzufügen. Dies könnte den Pfad zu unserem hinzufügen startup.m. Der letzte Befehl zwischen den Apostrophen ist einfach ein Aufruf von startup.m, also wird er ausgeführt.

Jetzt legt das Skript den gewünschten Pfad, die Einstellungen und das Layout fest. Ein Problem besteht weiterhin: MATLAB benötigt einen Neustart, um das Layout tatsächlich zu ändern. Dies geschieht mit startup.m, finish.mund eine zweite .bat Datei.

Die zweite .bat-Datei beendet MATLAB über die Befehlszeile und startet MATLAB erneut. startup.mmuss wissen, dass es zuerst gestartet wurde und dann diese .bat-Datei ausführt. finish.mmuss dieses Wissen klären. Hier ist was ich getan habe.

(das geht rein restartup.bat)

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

Wie Sie sehen, taskkillwird ein Prozess mit einer noch unbekannten ( %1) Prozess-ID ( /pid) abgebrochen . Diese ID wird beim Aufruf dieser .bat-Datei von bereitgestellt startup.m. Dieser Aufruf darf jedoch nicht erfolgen, wenn MATLAB bereits neu gestartet wurde, um das Layout und die Voreinstellungen wiederherzustellen. Also startup.mmuss eine Erinnerung daran erstellt werden, dass es bereits läuft. Ich habe das wie folgt gemacht.

(das geht rein 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 

Der Speicher, den ich angegeben habe, startup.mist eine Datei, die, falls vorhanden, den Neustart von MATLAB verhindert. Diese Datei wird aufgerufen name. Die aktuelle Prozess-ID von MATLAB wird mit erhalten num2str(feature('getpid')). Dies wird wiederum an den Aufruf von übergeben restartup.bat, wodurch der MATLAB-Prozess beendet wird. Denken Sie daran, dass dieser Kill nicht ausgelöst finish.mwird. Daher löschen wir die Speicherdatei in diesem Skript. Wenn MATLAB normal beendet wird, verschwindet die Speicherdatei, und MATLAB weiß, dass er beim nächsten Start neu gestartet wird.

(das geht rein finish.m)

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

Bonus für das lange Lesen: Lesen Sie hier, wie Sie die startup.mStandardwerte in der linken Bildschirmhälfte geöffnet haben. Nun kann das Hauptfenster von MATLAB gut auf der rechten Bildschirmhälfte platziert werden, und Figurenfenster überlappen es nicht (was standardmäßig der Fall ist).


Jetzt habe ich meine beiden Fragen gelöst und deshalb beantwortet! Ich verstehe, dass dies eine ziemlich ausführliche Antwort ist und daher eine schwierige Lektüre ist. Sie können also gerne Fragen stellen und Kommentare mit Anregungen posten, um meine Methoden zu verbessern.