diff -ruN a/bridge/bridge.go b/bridge/bridge.go
--- a/bridge/bridge.go
+++ b/bridge/bridge.go
@@ -51,6 +51,7 @@
 
 	Env.BasePath = filepath.ToSlash(filepath.Dir(exePath))
 	Env.AppName = filepath.Base(exePath)
+	Env.ConfigPath = filepath.ToSlash(GetConfigPath())
 
 	if slices.Contains(os.Args, "tasksch") {
 		Env.FromTaskSch = true
@@ -93,7 +94,10 @@
 
 func (a *App) RestartApp() FlagResult {
 	log.Printf("RestartApp")
-	exePath := resolvePath(Env.AppName)
+	exePath, err := os.Executable()
+	if err != nil {
+		exePath = filepath.Join(Env.BasePath, Env.AppName)
+	}
 
 	cmd := exec.Command(exePath)
 	SetCmdWindowHidden(cmd)
@@ -116,6 +120,7 @@
 		AppName:      Env.AppName,
 		AppVersion:   Env.AppVersion,
 		BasePath:     Env.BasePath,
+		ConfigPath:   Env.ConfigPath,
 		OS:           Env.OS,
 		ARCH:         Env.ARCH,
 		IsPrivileged: Env.IsPrivileged,
diff -ruN a/bridge/types.go b/bridge/types.go
--- a/bridge/types.go
+++ b/bridge/types.go
@@ -21,6 +21,7 @@
 	AppName      string `json:"appName"`
 	AppVersion   string `json:"appVersion"`
 	BasePath     string `json:"basePath"`
+	ConfigPath   string `json:"configPath"`
 	OS           string `json:"os"`
 	ARCH         string `json:"arch"`
 	IsPrivileged bool   `json:"isPrivileged"`
diff -ruN a/bridge/utils.go b/bridge/utils.go
--- a/bridge/utils.go
+++ b/bridge/utils.go
@@ -23,7 +23,29 @@
 var requestTransportCache sync.Map
 
+func GetConfigPath() string {
+	if Env.OS == "linux" {
+		if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" {
+			return filepath.Join(xdgConfigHome, "GUI.for.SingBox")
+		}
+		if userConfigDir, err := os.UserConfigDir(); err == nil {
+			return filepath.Join(userConfigDir, "GUI.for.SingBox")
+		}
+	}
+
+	return Env.BasePath
+}
+
 func resolvePath(path string) string {
+	if Env.OS == "linux" && !filepath.IsAbs(path) {
+		cleanPath := filepath.ToSlash(filepath.Clean(path))
+		if cleanPath == "data" {
+			path = filepath.Join(GetConfigPath(), "data")
+		} else if strings.HasPrefix(cleanPath, "data/") {
+			path = filepath.Join(GetConfigPath(), cleanPath)
+		}
+	}
+
 	if !filepath.IsAbs(path) {
 		path = filepath.Join(Env.BasePath, path)
 	}
 	return filepath.ToSlash(filepath.Clean(path))
