Làm cách nào để biết môi trường máy tính để bàn của tôi đang sử dụng Python là gì? Tôi thích kết quả là gnome hoặc KDE hoặc người nào khác.Môi trường máy tính để bàn hiện tại của tôi là gì?
Trả lời
Tested trong Ubuntu 9.10:
>>> import os
>>> os.environ.get('DESKTOP_SESSION')
'gnome'
Edit: Như đã đề cập trong ý kiến dưới đây, phương pháp này sẽ không làm việc cho hơn một số hệ điều hành. Hai câu trả lời khác cung cấp cách giải quyết.
Bạn có thể thử này:
def detect_desktop_environment():
desktop_environment = 'generic'
if os.environ.get('KDE_FULL_SESSION') == 'true':
desktop_environment = 'kde'
elif os.environ.get('GNOME_DESKTOP_SESSION_ID'):
desktop_environment = 'gnome'
else:
try:
info = getoutput('xprop -root _DT_SAVE_MODE')
if ' = "xfce4"' in info:
desktop_environment = 'xfce'
except (OSError, RuntimeError):
pass
return desktop_environment
Và đọc các cuộc thảo luận ở đây: http://ubuntuforums.org/showthread.php?t=1139057
Làm việc cho máy tính để bàn của tôi để phát hiện KDE (không giống như DESKTOP_SESSION, trả về Không) – JAL
Cập nhật về điều này. Sử dụng 'xprop -root | grep -io 'xfce'' và sau đó ít nhất thay thế giữa' xfce 'và' lxde '. Điều này hoạt động trên Raspbian và Ubuntu Studio. Thay đổi đầu ra thành trường hợp thấp hơn để hiểu rõ hơn hoặc lựa chọn theo một tuyên bố. – DarkXDroid
Đôi khi mọi người chạy một kết hợp của môi trường máy tính để bàn. Làm cho ứng dụng của bạn bất khả tri trên máy tính để bàn bằng cách sử dụng xdg-utils; có nghĩa là sử dụng xdg-open
để mở tệp hoặc url, sử dụng xdg-user-dir DOCUMENTS
để tìm thư mục tài liệu, xdg-email
để gửi e-mail, v.v.
tôi sử dụng điều này trong một dự án của tôi:
def get_desktop_environment(self):
#From http://stackoverflow.com/questions/2035657/what-is-my-current-desktop-environment
# and http://ubuntuforums.org/showthread.php?t=652320
# and http://ubuntuforums.org/showthread.php?t=652320
# and http://ubuntuforums.org/showthread.php?t=1139057
if sys.platform in ["win32", "cygwin"]:
return "windows"
elif sys.platform == "darwin":
return "mac"
else: #Most likely either a POSIX system or something not much common
desktop_session = os.environ.get("DESKTOP_SESSION")
if desktop_session is not None: #easier to match if we doesn't have to deal with caracter cases
desktop_session = desktop_session.lower()
if desktop_session in ["gnome","unity", "cinnamon", "mate", "xfce4", "lxde", "fluxbox",
"blackbox", "openbox", "icewm", "jwm", "afterstep","trinity", "kde"]:
return desktop_session
## Special cases ##
# Canonical sets $DESKTOP_SESSION to Lubuntu rather than LXDE if using LXDE.
# There is no guarantee that they will not do the same with the other desktop environments.
elif "xfce" in desktop_session or desktop_session.startswith("xubuntu"):
return "xfce4"
elif desktop_session.startswith("ubuntu"):
return "unity"
elif desktop_session.startswith("lubuntu"):
return "lxde"
elif desktop_session.startswith("kubuntu"):
return "kde"
elif desktop_session.startswith("razor"): # e.g. razorkwin
return "razor-qt"
elif desktop_session.startswith("wmaker"): # e.g. wmaker-common
return "windowmaker"
if os.environ.get('KDE_FULL_SESSION') == 'true':
return "kde"
elif os.environ.get('GNOME_DESKTOP_SESSION_ID'):
if not "deprecated" in os.environ.get('GNOME_DESKTOP_SESSION_ID'):
return "gnome2"
#From http://ubuntuforums.org/showthread.php?t=652320
elif self.is_running("xfce-mcs-manage"):
return "xfce4"
elif self.is_running("ksmserver"):
return "kde"
return "unknown"
def is_running(self, process):
#From http://www.bloggerpolis.com/2011/05/how-to-check-if-a-process-is-running-using-python/
# and http://richarddingwall.name/2009/06/18/windows-equivalents-of-ps-and-kill-commands/
try: #Linux/Unix
s = subprocess.Popen(["ps", "axw"],stdout=subprocess.PIPE)
except: #Windows
s = subprocess.Popen(["tasklist", "/v"],stdout=subprocess.PIPE)
for x in s.stdout:
if re.search(process, x):
return True
return False
Cảm ơn! Đây là hoàn hảo! – nachopro
Bạn nên tạo một mô-đun Python của nó và đặt nó trên PyPI. – Jabba
Tôi nên thêm điều đó vào Ubuntu Studio là 'os.environ.get (" DESKTOP_SESSION ")' ném 'ubuntustudio'. Để có được môi trường Desktop chính xác, tôi sử dụng 'os.environ ['XDG_CURRENT_DESKTOP']. Lower()' để lấy 'xfce'. Đây là giải pháp để mở rộng mã tuyệt vời này. Tải lên nó – DarkXDroid
- 1. Biến môi trường của tôi là gì?
- 2. Phát hiện môi trường máy tính để bàn trong Linux theo lập trình trong C
- 3. Sự khác biệt giữa vỏ đồ họa và môi trường máy tính để bàn
- 4. Thay đổi LD_LIBRARY_PATH của môi trường quy trình hiện tại
- 5. Biến môi trường XDG_SESSION_COOKIE là gì?
- 6. Cách tốt nhất để giám sát một ứng dụng máy tính để bàn là gì?
- 7. Cách tốt nhất để thiết lập môi trường phát triển PHP trên máy Mac là gì?
- 8. Youwave dành cho Android trong môi trường máy tính để bàn từ xa sử dụng mỏng client
- 9. Máy tính để bàn tạo cửa sổ máy tính để bàn?
- 10. OpenGL | ES trên máy tính để bàn
- 11. Scala cho máy tính để bàn
- 12. Mô phỏng đầu ra của bàn phím (đặt máy tính làm bàn phím của máy tính khác)
- 13. Các biến môi trường heroku khác là gì?
- 14. Mylyn như ứng dụng cho máy tính để bàn của tôi
- 15. BIRT trong ứng dụng dành cho máy tính để bàn
- 16. sự khác biệt giữa ứng dụng máy tính để bàn java và javafx là gì?
- 17. Các biến môi trường lạ này là gì?
- 18. ý nghĩa của các biến của Windows Môi trường là gì: HOMEDRIVE, HOMEPATH, HomeShare, USERPROFILE
- 19. cách thêm các chức năng vào môi trường hiện tại
- 20. Ứng dụng Máy tính để bàn Python
- 21. C# Ứng dụng dành cho máy tính để bàn?
- 22. MVC.NET cho máy tính để bàn
- 23. Chụp màn hình của máy tính để bàn ẩn
- 24. Thêm các phím tắt trên máy tính để bàn vào "Máy tính của tôi" trên Windows 2008 Server
- 25. Một số cách tốt nhất để thực hiện cập nhật im lặng cho ứng dụng dành cho máy tính để bàn là gì?
- 26. delphi XE2 không thể biên dịch bất kỳ dự án nào trên máy tính của tôi vì biến môi trường (Máy tính xách tay HP)
- 27. Tại sao môi trường của tôi yêu cầu tôi chạy gói exec?
- 28. Tôi có thể lắc máy tính để bàn của người dùng bằng WPF không?
- 29. Cách phát hiện yêu cầu trang từ phía máy khách hoặc máy tính để bàn
- 30. Python - tạm thời sửa đổi môi trường của quy trình hiện tại
Là chỉ ở giữa viết một câu trả lời mà tham gia liệt kê các quá trình nhưng điều này là tốt hơn nhiều. – mdm
Trên Mac OS X 10.6.2 'os.environ.get ('DESKTOP_SESSION')' trả về '" Không có "' –
tôi nghĩ vì mac chỉ có một! – aliva