-
Notifications
You must be signed in to change notification settings - Fork 331
/
StartUpScripts.shtml
706 lines (526 loc) · 26 KB
/
StartUpScripts.shtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.17), see www.w3.org">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: Startup Scripts</title>
<!-- Style -->
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<link rel="stylesheet" type="text/css" href="/css/default.css"
media="screen">
<link rel="stylesheet" type="text/css" href="/css/print.css"
media="print">
<link rel="icon" href="/images/jmri.ico" type="image/png">
<link rel="home" title="Home" href="/">
<!-- /Style -->
</head>
<body>
<!--#include virtual="/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: Startup Scripts</h1>
<p>Although JMRI itself is constructed to "run anywhere",
starting a JMRI application requires commands that are
specific to the particular type of computer used. With each
JMRI distribution, we provide application launchers that
handle the details for you.</p>
<p>This page provides information on the tools provided with
JMRI distributions on:</p>
<ul>
<li><a href="#linux">Linux</a></li>
<li><a href="#macosx">macOS and OS X</a></li>
<li><a href="#windows">Windows</a></li>
</ul>
<p>If you modify any of these, please consider either making
your change on the other machines (and testing it!) or at
least putting a comment in the others to describe how they
now differ.</p>
<p>During startup, JMRI pulls configuration from several
sources:</p>
<ul>
<li>If you're building and running the program locally, the <em>release.properties</em>
and <em>local.properties</em> files set the context.
<li>The file <em>jmri.conf</em> in the system-specific settings
directory is used by the startup scripts to set values.</li>
<li>JMRI code reads <a href="#prop">system properties</a> that were set before JMRI started.</li>
<li>The active <a href="../../setup/profiles.shtml">configuration
profiles</a> are read and processed.</li>
<li>The file <em>python.properties</em> is used to configure the
Jython interpreter when it's launched.</li>
</ul>
<h3 id="env">Environment variables</h3>
Since JMRI version 2.11.4, it
is possible to influence the settings used to launch JMRI via
the use of environment variables which are interpreted by
the startup scripts.
These are:
<dl>
<dt>JMRI_HOME</dt>
<dd>This determines the program location</dd>
<dt>JMRI_OPTIONS</dt>
<dd>This specifies additional JVM options</dd>
<dt>JMRI_PREFSDIR</dt>
<dd>This specifies the location of an alternative
preferences directory</dd>
<dt>JMRI_USERHOME</dt>
<dd>This specifies the location of an alternative user home
directory</dd>
</dl>If both JMRI_PREFSDIR and JMRI_USERHOME are defined, the
location defined by JMRI_PREFSDIR will take precedence over
the location defined by JMRI_USERHOME for determining the
location of the preferences file.
<h3 id="prop">JMRI properties</h3>
In this section, we briefly describe
some JMRI-specific Java system properties that are interpreted by
the JMRI library itself.
Consult the Java documentation for Java properties that
JMRI will use, including os.name, user.home, etc.
Note that many naming conventions have been used, but the
"org.jmri...." form is now preferred.
<p>
In general, to set one of these, use the form:
<pre>
-Dorg.jmri.python.preload=true
</pre>
in the JMRI_OPTIONS environment variable.
<dl>
<dt>org.jmri.apps.Apps.configFilename</dt>
<dd>Usually set by the startup scripts</dd>
<dt>jmri.path.program</dt>
<dd>Current working directory by default, but can be overridden if set before startup.</dd>
<dt>jmri.prefsdir</dt>
<dd>A system-specific directory by default, but can be overridden if set before startup.</dd>
<dt>jmri_default_cachedir</dt>
<dd>A system-specific directory by default, but can be overridden if set before startup.</dd>
<dt>jmri.log</dt>
<dd>Full or partial pathname of the logging control file, by default "default.lcf"</dd>
<dt>jmri.log.path</dt>
<dd>The directory for storing logs. If not specified, logs are stored in the JMRI preferences directory.</dd>
<dt>jmri.inset.width, jmri.inset.height</dt>
<dd>Overrides the space automatically reserved for screen insets in jmri.util.JFrame</dd>
<dt>org.jmri.python.preload</dt>
<dd>If true, JMRI will start the Python script engine during startup.
If false or unspecified, the engine will be started when the
first script is launched.</dd>
</dl>
<a id="testingvars" name="testingvars"></a>
There are also a few that are only used during testing, i.e. in the JUnit CI
tests. They're documented on the
<a href="JUnit.shtml#testingvars">JMRI JUnit page</a>.
<h2 id="Linux">Linux</h2>
<p>JMRI distributions for Linux contain bash shell scripts
for each of the main applications: DecoderPro, PanelPro, etc.
These are all identical except for application name and main
Java class.</p>
<h3>Parameters</h3>
<p>The JMRI shell scripts take the following parameters:</p>
<dl>
<dt><code>-c <em>CONFIG</em></code></dt>
<dt><code>--config=<em>CONFIG</em></code></dt>
<dd>Starts JMRI with the configuration named
<em>CONFIG</em>. A configuration determines which
configuration profile to use and how the configuration
profile selector is displayed at application start.</dd>
<dt><code>--cp:a=<em>CLASSPATH</em></code></dt>
<dd>Append the JARs and directories in <em>CLASSPATH</em>
to the end of the standard JMRI classpath. This is the
recommended way to add additional Java classes to
JMRI.</dd>
<dt><code>--cp:p=<em>CLASSPATH</em></code></dt>
<dd>Prepend the JARs and directories in <em>CLASSPATH</em>
to the beginning of the standard JMRI classpath. This is
the recommended way to override existing Java classes in
JMRI.</dd>
<dt><code>-d</code></dt>
<dt><code>--debug</code></dt>
<dd>Print debugging statements within the launcher script
itself to the console. On macOS, this is always on, and
debugging output is available through the Console.app.</dd>
<dt><code>-D<em>PROPERTY</em></code></dt>
<dd>Pass a Java System Property to the Java Virtual
Machine. This will be available to the JMRI application
while running.</dd>
<dt><code>-J<em>OPTION</em></code></dt>
<dd>Pass a complete Java option to the Java Virtual
Machine. The most commonly useful option is the maximum
memory JMRI is allowed to use, passed as
<em>-J-Xmx2048m</em> (in this example, set to 2 GB).</dd>
<dt><code>-p <em>PROFILE</em></code></dt>
<dt><code>--profile=<em>PROFILE</em></code></dt>
<dd>Start JMRI with the configuration profile
<em>PROFILE</em>. The profile can be specified by its complete path or
by its internal Id.</dd>
<dt><code>--serial-ports=<em>SERIAL_PORTS</em></code></dt>
<dd>Set the names of usable serial ports to the comma
separated list of ports in <em>SERIAL_PORTS</em>. This is
ignored on macOS.</dd>
<dt><code>--settingsdir=<em>SETTINGS_DIR</em></code></dt>
<dd>
Set the directory that JMRI uses to find its initial
configuration to the directory specified in
<em>SETTINGS_DIR</em>. It is generally recommended not to
set this manually, but to let JMRI determine this on its
own. This defaults to:
<dl>
<dt>Linux</dt>
<dd><code>${HOME}/.jmri</code></dd>
<dt>macOS</dt>
<dd><code>${HOME}/Library/Preferences/JMRI</code></dd>
</dl>
</dd>
<dt><code>--help</code></dt>
<dd>Print a concise list of all options the launcher
handles.</dd>
</dl>
<p>If you need to set one or more of these parameters
persistently, set them in the default_options variable in the
file <em>jmri.conf</em> in the settings directory, with the
exception of the <code>--settingsdir=<em>PATH</em></code>
parameter. An example is:</p>
<p><code>default_options="-J-Xmx2048m"</code></p>
<h2 id="macosx">macOS</h2>
JMRI distributions for macOS contain application bundles for each of the
main applications: DecoderPro, PanelPro, and SoundPro. These provide familiar
application icons for the user.
<p>The applications are registered with macOS when copied from the
distributed disk image onto the user's disk drive, however, no mechanism
within the JMRI applications takes advantage of this registration.</p>
<h3>Script Details</h3>
<p>Each bundle has a startup bash shell script in the Contents/MacOSX
directory that performs the actual startup. This is the same script as
used for Linux, see <a href="#linux">that section</a> for details.</p>
<h3>Uniform Type Identifiers</h3>
<p><a href="https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html#//apple_ref/doc/uid/TP40001319">Uniform Type Identifiers</a>
(UTIs) are a mechanism that iOS, macOS, and tvOS use to identify file
and URL types to ensure that the correct application is used to open a
file or handle a URL. UTIs allow these operating systems to support
Packages, or directories that are represented to a user as a single file,
and Bundles, which are Packages with executable content.</p>
<p><a href="https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16">Application Sandboxes</a>
are a security and privacy control in iOS and macOS that limit
applications to accessing data the user has explictly granted the application
access to, or is contained within the sandbox. In iOS, users can only
grant access to files, while in macOS, users can grant access to files
and directories. When requesting access, applications request the operating
system prompt the user to grant access to file types identified by UTI.</p>
<p>Since the JMRI applications are not subject to application sandboxes,
JMRI applications do not export any UTIs that would allow other applications
subject to sandboxes to request permission from the user to view or edit
JMRI Configuration Profiles.</p>
<p>To allow other macOS applications or any iOS app to request permission
from a user to view or edit a JMRI Configuration Profile if the Profile
is in a directory with the <code>.jmri</code> extension, add the following
UTI and document type to that application's Info.plist file:</p>
<pre>
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>com.apple.package</string>
</array>
<key>UTTypeIconFiles</key>
<array/>
<key>UTTypeIdentifier</key>
<string>org.jmri.profile</string>
<key>UTTypeDescription</key>
<string>JMRI Configuration Profile</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>jmri</string>
</dict>
</dict>
</array>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>JMRI Configuration Profile</string>
<key>CFBundleTypeIconFiles</key>
<array/>
<key>LSItemContentTypes</key>
<array>
<string>org.jmri.profile</string>
</array>
</dict>
</array>
</pre>
<p>Note that you will want to provide icons for these documents; the example
does not. Note also that if, and when, the JMRI applications include the
UTIs, they need to <em>export</em> the UTIs instead of <em>importing</em>
the UTIs, as other non-JMRI applications should.</p>
<p>Note that a UTI is only present for Configuration Profiles, not for Rosters
or User Files, since most users store those within a Configuration Profile.
Rosters also have a structure that is not conducive to defining a UTI for it
(the roster index (<code>roster.xml</code>) is stored adjacent to the
<code>roster</code> directory that contains the individual roster entries,
images, and icons. User files are, if not contained within a Configuration
Profile, in an arbitrary directory, and likely would need individual
access from different applications for editing outside of JMRI.</p>
<h2 id="windows">Windows</h2>
Upto and including JMRI version 2.3.2, the
Windows .bat files just create a fixed java command and
executed it.
<p>From JMRI version 2.3.3, the individual Windows .bat files
now call a small launcher application, LaunchJMRI.exe.</p>
<h3>Command-line details</h3>In this section, we briefly
describe the launcher application command-line options and
parameters.
<dl>
<dt><code>/debug</code></dt>
<dd>If this option is set on the command line, a window is
opened that displays various useful information for
debugging purposes. (since JMRI 2.5.1)</dd>
<dt><code>/noisy</code></dt>
<dd>Set this option to enable the Java Console window.
System messages are now available via the
'Help > System Console ...' menu option in the main JMRI
window. (since JMRI 2.5.1)</dd>
<dt><code>/32bit</code></dt>
<dd>If this option is set on the command line, the launcher
will force the use of a 32-bit Java Runtime Environment on
64-bit machines. This option has no effect on 32-bit
machines. (since JMRI 2.99.4)</dd>
<dt><code>/profile <em>PROFILEID</em></code></dt>
<dd>If this option is set on the command line, the launcher
will use profile <em>PROFILEID</em> as the <a href=
"../../setup/profiles.shtml">JMRI configuration
profile</a> to use instead of the default one. (since JMRI 3.7.1)</dd>
<dt><code>--cp:a=<em>CLASSPATH</em></code></dt>
<dd>Append the JARs and directories in <em>CLASSPATH</em>
to the end of the standard JMRI classpath. This is the
recommended way to add additional Java classes to
JMRI. (since JMRI 4.5.7)</dd>
<dt><code>--cp:p=<em>CLASSPATH</em></code></dt>
<dd>Prepend the JARs and directories in <em>CLASSPATH</em>
to the beginning of the standard JMRI classpath. This is
the recommended way to override existing Java classes in
JMRI. (since JMRI 4.5.7)</dd>
<dt><code>/noalt</code></dt>
<dd>If this option is set on the command line, the launcher
will no longer use the alternate launching behavior of using
a renamed java.exe from a temporary location and revert to the
standard java.exe. This means that the launched JMRI application
is no longer explicitly mentioned in Windows Task Manager. This
option is the default behavior with JDK 11. (since JMRI 4.15.3)</dd>
<dt>Class Parameter (Required)</dt>
<dd>The first parameter of LaunchJMRI.exe, after any of the
above options, is the name of the main class to
execute.</dd>
<dd>An example to launch DecoderPro would be
"apps.DecoderPro.DecoderPro"</dd>
<dt>Configuration File Parameter</dt>
<dd>If there's a second argument to the launcher, it will
be used as the name of the preferences file used to
configure the program at startup. If the user saves the
preferences from the program, they'll go to this file
too.<br>
If no argument is provided, the configuration file name is
defaulted in the application. For example, the DecoderPro
application uses DecoderProConfig2.xml as a preferences
file. If the launcher is called by 'LaunchJMRI.exe
apps.DecoderPro.DecoderPro MyJmriAppConfig2.xml', it will
use a preferences file named MyJmriAppConfig2.xml.<br>
This allows you to create as many specialized
configurations you'd like by creating a new Start Menu
and/or Desktop shortcut to 'LaunchJMRI.exe' file and adding
the preferences file as a parameter.</dd>
</dl>
<h3>Launcher details</h3>In this section, we briefly describe
what the Windows launcher application does.
<dl>
<dt>Directory</dt>
<dd>To run, JMRI needs to be able to find things in the
current directory. This step changes the current directory
to where the launcher is located.</dd>
<dt>Java options</dt>
<dd>The launcher sets a number of options for the JVM. This
includes the necessary program settings, setting memory
limits, and various symbols to control operation.</dd>
<dt>Classpath</dt>
<dd>
The script builds the Java classpath automatically to
contain, in order:
<ul>
<li>class files in the current directory</li>
<li>class files in the classes subdirectory of the
current directory</li>
<li>all jar files in the current directory, except
jmri.jar</li>
<li>jmri.jar in the current directory</li>
<li>all jar files in the lib subdirectory of the
current directory</li>
</ul>This allows you to drop jar files into the JMRI
install directory for the <a href="plugins.shtml">JMRI
plug-in mechanism</a>.
</dd>
<dt>Java command</dt>
<dd>Finally, the launcher puts all this together into a
java command, which it executes.</dd>
</dl>
<h3 id="startm">Start Menu shortcuts and Desktop icons</h3>In a default
JMRI installation, a number of shortcuts are created in the
Start Menu, along with Desktop Icons for DecoderPro and
PanelPro.
<h4>Start Menu shortcuts</h4>All JMRI Start Menu shortcuts
are placed in the "JMRI" start menu folder (or sub-folders)
in the following structure:
<ul>
<li>JMRI
<ul>
<li>DecoderPro - launch DecoderPro application</li>
<li>PanelPro - launch PanelPro application</li>
<li>SoundPro - launch SoundPro application</li>
<li>Uninstall - remove entire JMRI suite</li>
<li>Tools and Demos
<ul>
<li>InstallTest - launch InstallTest
application</li>
<li>Preferences - open user preferences folder</li>
</ul>
</li>
</ul>
</li>
</ul>Additional icons may be placed within this structure
depending on the options chosen during installation and the
version of JMRI being installed.
<p>Start Menu shortcut example for DecoderPro (assuming JMRI
is installed in the default location "C:\Program
Files\JMRI"):</p>
<p><i>Important note: in the following, replace "C:\Program
Files\JMRI" by "C:\Program Files (x86)\JMRI" if your Windows
is a 64bits version.</i></p>
<dl>
<dt>Shortcut name</dt>
<dd>'All Users' on Windows 2000 and XP - C:\Documents and
Settings\All Users\Start
Menu\Programs\JMRI\DecoderPro.lnk</dd>
<dd>'All Users' on Windows Vista and 7 -
C:\ProgramData\Microsoft\Windows\Start
Menu\Programs\JMRI\DecoderPro.lnk</dd>
<dd>'Current User' on Windows 2000 and XP - C:\Documents
and Settings\[username]\Start
Menu\Programs\JMRI\DecoderPro.lnk</dd>
<dd>'Current User' on Windows Vista and 7 -
C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start
Menu\Programs\JMRI\DecoderPro.lnk</dd>
<dt>Target</dt>
<dd>"C:\Program Files\JMRI\LaunchJMRI.exe"
apps.gui3.dp3.DecoderPro3</dd>
<dd><i>(up to version 3.11.x was: "C:\Program
Files\JMRI\LaunchJMRI.exe"
apps.DecoderPro.DecoderPro)</i></dd>
<dt>Start In</dt>
<dd>"C:\Program Files\JMRI"</dd>
<dt>Shortcut Key</dt>
<dd>None</dd>
<dt>Run</dt>
<dd>Normal window</dd>
<dt>Comment</dt>
<dd>Start DecoderPro</dd>
<dt>Icon</dt>
<dd>"C:\Program Files\JMRI\decpro5.ico"</dd>
</dl>
<h4 id="wicon">Desktop Icons</h4>Desktop Icons for DecoderPro and
PanelPro are created in the default installation - at
installation time an optional desktop icon can also be
created for the SoundPro application.
<p>The structure of Desktop Icon creation is similar to that
of the Start Menu shortcuts above - example Desktop Icon for
DecoderPro (again assuming JMRI is installed in the default
location "C:\Program Files\JMRI"):</p>
<dl>
<dt>Shortcut name</dt>
<dd>'All Users' on Windows 2000 and XP - C:\Documents and
Settings\All Users\Desktop\DecoderPro.lnk</dd>
<dd>'All Users' on Windows Vista and 7 -
C:\Users\Public\Desktop\DecoderPro.lnk</dd>
<dd>'Current User' on Windows 2000 and XP - C:\Documents
and Settings\[username]\Desktop\DecoderPro.lnk</dd>
<dd>'Current User' on Windows Vista and 7 -
C:\Users\[username]\Desktop\DecoderPro.lnk</dd>
<dt>Target</dt>
<dd>"C:\Program Files\JMRI\LaunchJMRI.exe"
apps.gui3.dp3.DecoderPro3</dd>
<dd><i>(up to version 3.11.x was: "C:\Program
Files\JMRI\LaunchJMRI.exe"
apps.DecoderPro.DecoderPro)</i></dd>
<dt>Start In</dt>
<dd>"C:\Program Files\JMRI"</dd>
<dt>Shortcut Key</dt>
<dd>None</dd>
<dt>Run</dt>
<dd>Normal window</dd>
<dt>Comment</dt>
<dd>Start DecoderPro</dd>
<dt>Icon</dt>
<dd>"C:\Program Files\JMRI\decpro5.ico"</dd>
</dl><a name="old_DecoderPro" id="old_DecoderPro"></a>
<h2 id="dp-forever">Retrieving "legacy" DecoderPro from versions prior to
4.0.x</h2>
<p>The "legacy" DecoderPro that was existing prior to version
4.0.x has been removed from the distribution package and the
former "DecoderPro 3" has been promoted to be the only
available DecoderPro version.</p>
<p>If you absolutely cannot use the new DecoderPro user
interface (roster view), we suggest one of the following
methods:</p>
<ol>
<li><b>Using PanelPro with script</b>: With the exception
of a different icon and different fixed buttons on the main
window, PanelPro has an identical user interface to the
legacy DecoderPro.</li>
<li style="list-style: none">
<ul>
<li>You can add the 3 fixed buttons (Open Roster,
Service Mode, Operations Mode) that used to be on the
legacy DecoderPro by adding a script at start-up.</li>
<li>Go to Edit > Preferences > Start-up >
Scripts > Add Script. Select file "C:\Program
Files\JMRI\jython\jython/MakeOriginalDecoderPro.py"</li>
<li>Then, save and restart.</li>
</ul>
</li>
<li><b>Using PanelPro with buttons</b>:</li>
<li style="list-style: none">
<ul>
<li>You can add several fixed buttons of your choice on
the PanelPro interface.</li>
<li>Go to Edit > Preferences > Start-up >
Buttons > Add Button. Select the action of your
choice. Repeat for as many buttons as you wish.</li>
<li>For same buttons as on legacy DecoderPro, select
"Open Roster", "DecoderPro service programmer" and
"DecoderPro ops-mode programmer"</li>
<li>Then, save and restart.</li>
</ul>
</li>
<li><b>Adding a custom shortcut to legacy
DecoderPro</b>:</li>
<li style="list-style: none">
<ul>
<li>Copy and Paste the "DecoderPro" shortcut (on your
desktop or in the start menu)</li>
<li>Rename the copy to "DecoderPro legacy" <i>(or
anything else of your choice, but <b>not</b>
"DecoderPro")</i></li>
<li>On the new shortcut, right-click >
Properties</li>
<li>In target, replace existing one by: "C:\Program
Files\JMRI\LaunchJMRI.exe"
apps.DecoderPro.DecoderPro</li>
<li>This will launch the legacy DecoderPro
interface.</li>
</ul>
</li>
</ol>
<!--#include virtual="/Footer.shtml" -->
</div>
</div>
</body>
</html>