--- a/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java
+++ b/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java
@@ -751,3 +751,4 @@
 
-		File serverLogFile = new File(serverRoot, "server.log");
+		File serverLogFile = new File(
+			System.getProperty("ghidra.server.logdir", serverRoot.getPath()), "server.log");
 		Application.initializeLogging(serverLogFile, serverLogFile);
--- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java
+++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java
@@ -24,2 +24,3 @@
 import ghidra.util.Msg;
+import utility.application.ApplicationUtilities;
 
@@ -201,3 +202,4 @@
 			 */
-			File logFile = new File(Application.getUserSettingsDirectory(), "pdb.analyzer.log");
+			File logFile = new File(ApplicationUtilities.getDefaultUserStateDir(
+				Application.getApplicationLayout().getApplicationProperties()), "pdb.analyzer.log");
 			if (logFile.exists()) {
--- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java
+++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java
@@ -151,5 +151,5 @@
 	 * @param logFile application log file, if null the default <i>application.log</i> will be stored
-	 * within the user's application settings directory
+	 * within the user's application state directory
 	 * @param scriptLogFile scripting log file, if null the default <i>script.log</i> will be stored
-	 * within the user's application settings directory
+	 * within the user's application state directory
 	 * @throws AssertException if Application has not yet been initialized, or logging
@@ -164,7 +164,16 @@
 
-		if (logFile == null) {
-			logFile = new File(app.layout.getUserSettingsDir(), "application.log");
-		}
-		if (scriptLogFile == null) {
-			scriptLogFile = new File(app.layout.getUserSettingsDir(), "script.log");
+		if (logFile == null || scriptLogFile == null) {
+			try {
+				File logDir = ApplicationUtilities.getDefaultUserStateDir(
+					app.layout.getApplicationProperties());
+				if (logFile == null) {
+					logFile = new File(logDir, "application.log");
+				}
+				if (scriptLogFile == null) {
+					scriptLogFile = new File(logDir, "script.log");
+				}
+			}
+			catch (IOException e) {
+				throw new UncheckedIOException("Failed to create log directory", e);
+			}
 		}
--- a/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
+++ b/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java
@@ -218,3 +218,3 @@
 				case WINDOWS -> new File(getEnvFile("LOCALAPPDATA", true), appName);
-				case LINUX -> new File("/var/tmp/" + userDirName);
+				case LINUX -> new File(getJavaUserHomeDir(), ".cache/" + appName);
 				case FREE_BSD -> new File("/var/tmp/" + userDirName);
@@ -230,2 +230,13 @@
 		}
+	}
+
+	public static File getDefaultUserStateDir(ApplicationProperties applicationProperties)
+			throws IOException {
+		File root = getEnvFile(XdgUtils.XDG_STATE_HOME, false);
+		if (root == null) {
+			root = new File(getJavaUserHomeDir(), ".local/state");
+		}
+		ApplicationIdentifier id = new ApplicationIdentifier(applicationProperties);
+		return createDir(new File(root,
+			getUserSpecificDirName(root, id.getApplicationName()) + "/" + id));
 	}
--- a/Ghidra/RuntimeScripts/server/server.conf
+++ b/Ghidra/RuntimeScripts/server/server.conf
@@ -13,4 +13,5 @@
 
-# Initial Working Directory (i.e., absolute installation directory path)
-wrapper.working.dir=${ghidra_home}
+# Working directory.
+wrapper.working.dir=@GENTOO_EPREFIX@/var/lib/ghidra
+wrapper.cache=@GENTOO_EPREFIX@/var/cache/ghidra
 
@@ -84,2 +85,4 @@
 #wrapper.java.additional.10=-Dghidra.password=
+
+wrapper.java.additional.22=-Dghidra.server.logdir=@GENTOO_EPREFIX@/var/log/ghidra
 
@@ -148,3 +151,3 @@
 
-ghidra.repositories.dir=./repositories
+ghidra.repositories.dir=@GENTOO_EPREFIX@/var/lib/ghidra/repositories
 
@@ -236,3 +239,3 @@
 # Log file to use for wrapper output logging.
-wrapper.logfile=wrapper.log
+wrapper.logfile=@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log
 
--- a/Ghidra/RuntimeScripts/support/launch.properties
+++ b/Ghidra/RuntimeScripts/support/launch.properties
@@ -153,3 +153,3 @@
 #  - Windows: %LOCALAPPDATA%\<application>
-#  - Linux: /var/tmp/<user>-<application>
+#  - Linux: $HOME/.cache/<application>
 #  - macOS: /var/tmp/<user>-<application>
--- a/Ghidra/RuntimeScripts/server/ghidraSvr
+++ b/Ghidra/RuntimeScripts/server/ghidraSvr
@@ -48,3 +48,3 @@
 	echo
-	echo -e "ERROR: $1" >> "${GHIDRA_HOME}/wrapper.log"
+	echo -e "ERROR: $1" >> "@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log"
 	exit 1
