11

I am using emacs 24.3 (ubuntu 14.10) and would like the daemon to participate in the graphical desktop session lifecycle while using desktop-mode. I went through http://www.emacswiki.org/emacs/EmacsAsDaemon but it still does not play nice for me. One problem is that the daemon SIGTERM termination does not clean up .emacs.desktop.lock so the next start will refuse to pick up the saved state.

Does anyone have a recipe to make emacs daemon + desktop mode play nice with the graphical desktop session?

As a sidenote: Sending SIGHUP frequently crashes emacs for me.

2 Answers 2

6

Don't kill the process.

Use M-x kill-emacs RET to terminate the server.

4
  • Ok, that cleans up the look. I may be missing something, but how does one execute that termination of the graphical session? The easiest thing I could think of would be a custom OS signal handler. Commented Feb 11, 2015 at 10:13
  • 2
    If you have an active client frame, you can issue kill-emacs directly. If you have no current clients, you can run emacsclient -e '(kill-emacs)'. If you just want Emacs to shut down more gracefully when killed by a signal, you'll probably need to M-x report-emacs-bug (after checking to see whether it's already been logged). Commented Feb 11, 2015 at 23:32
  • Sure. The thing is that I do not want to bother and manually tell every program to shut down gracefully. Desktop session managers do tell programs the session is about to terminate. I want emacs to automatically take action at that time. Commented Feb 12, 2015 at 8:19
  • Well check the bug reports, report a new one if necessary, and once you have more information, update the question, or post an answer. Commented Feb 12, 2015 at 10:26
1

This is how I solved it for me: (you need to disable elsewhere desktop-save-mode)

(require 'desktop) ;; (setq desktop-restore-forces-onscreen nil) (if (not (daemonp)) (desktop-save-mode 1) (defun restore-desktop (frame) "Restores desktop and cancels hook after first frame opens. So the daemon can run at startup and it'll still work" (with-selected-frame frame (desktop-save-mode 1) (desktop-read) (remove-hook 'after-make-frame-functions 'restore-desktop))) (add-hook 'after-make-frame-functions 'restore-desktop)) 

Uncomment first line if you get the Error (frameset): Wrong type argument: number-or-marker-p, nil.

Btw, use (global-set-key (kbd "C-x C-M-c") 'save-buffers-kill-emacs) to leave emacsclient safely.

1
  • Thats not enabling it if it starts via emacsclient though is it? Commented Nov 13, 2023 at 22:47

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.