Định nghĩa ứng dụng desktop trong Gnome và biến môi trường
Linux
91
tips
18
#TIL
6
White

Bùi Hồng Hà viết ngày 26/03/2016

Giới thiệu

Loay hoay cài Intellij trên CentOS 7 với Gnome, gặp 2 vấn đề thú vị nên viết lại cho bạn nào gặp phải thì nhanh chóng giải quyết được vấn đề luôn.

Phiên bản mình chạy là

  • CentOS 7.2.1511
  • Gnome: 3.14.4

Nếu bạn dùng CentOS hay các bản RHEL-Compatible khác thì bạn có thể tra cứu 2 nội dung trên như sau:

~ » cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core) 

~ » gnome-shell --version
GNOME Shell 3.14.4

Cài Intellij app

Intellij của JetBrain có thể nói là công cụ lập trình Java tốt nhất hiện nay. Mình cài chương trình này bằng cách download tarball và giải nén vào /home/Username/local/idea

Để khởi động Idea, ta chạy script do Jetbrain cung cấp tại

/home/Username/local/idea/bin/idea.sh

app khởi động như hình dưới đây!
alt text

Tuy vậy ta muốn sử dụng Launcher của Gnome (để chạy app nhanh và nhiều để tìm kiếm app) thay vì phải mở terminal để chạy script thế kia.

Trong Gnome 3, ta có thể lauch app bằng cách định nghĩa app dưới đường dẫn /usr/share/applications

Ta tạo 1 file /usr/share/applications/IDEA.desktop với nội dung như sau:

[Desktop Entry]
Encoding=UTF-8
Name=intellj IDEA
Comment=Intellij IDEA IDE
Exec=/home/Username/local/idea/bin/idea.sh
Icon=/home/Username/local/idea/bin/idea.png
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

Kết quả là ta có thể lauch idea qua Launcher như hình vẽ dưới đây

alt text

Tuy vậy khi khởi động idea, idea sẽ báo lỗi không thể khởi động được do thiếu tools.jar trong JDK và yêu cầu định nghĩa JAVA_HOME dù rằng mình đã định nghĩa JAVA_HOME dưới .bashrc

alt text

Biến môi trường

Sau một hồi tìm hiểu, mình hiểu ra là dù mình định nghĩa biến môi trường ở .bashrc đi nữa thì app khởi động qua IDEA.desktop không thể đọc được biến này. Gnome cung cấp 2 cách để người dùng có thể định nghĩa biến môi trường cho các app desktop là qua /etc/environment và qua |.profile

Định nghĩa biến theo session

Phương pháp này thích hợp đối với các biến dành cho một user nào đó (không phải dành cho toàn bộ hệ thống). Ta định nghĩa biến môi trường thông qua 2 file ~/.pam_profile~/.profile.

~/.pam_environment

Ta định nghĩ biến bằng cú pháp sau

FOO=bar
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/MyPrograms

Chú ý:

  • dấu " không có ý nghĩa gì cả. Vì vậy ta không thể định nghĩa biến mà giá trị có dấu cách
  • tại thời điểm file ~.pam_environment được parse, một số biến môi trường có thể chưa có giá trị.
  • các ứng dụng GUI thỉnh thoảng sẽ ghi các biến môi trường vào file này, và vì thế các cài đặt của bạn có thể sẽ bị ghi đè.

~/.profile

File này sẽ được chạy bởi DisplayManager và vì vậy là nơi lý tưởng để cài các biến môi trường cần thiết cho GUI app. Cú pháp cài đặt biến trong file này giống hệt các biến trong .bashrc

export FOO=bar
export PATH DEFAULT=${PATH}:/home/@{PAM_USER}/MyPrograms

Định nghĩa biến cho toàn hệ thống

Một nơi khác mà ta có thể định nghĩa giá trị biến môi trường cho toàn hệ thống là /etc/environment. Ta định nghĩa các biến bằng cách ghi giá trị vào file này. Cú pháp định nghĩa giống như định nghĩa trong .pam_environment

Ngoài ra ta có thể định nghĩa các biến trong các file shell ở đường dẫn /etc/profile.d/*.sh. Các file này sẽ được chạy khi bash login shell khởi động (qua console hay ssh) hay qua DisplayManager.

Giải quyết bài toán khởi động IDEA

Với kiến thức có được, ta biết rằng JAVA_HOME để được DisplayManager khởi động cần được cài đặt trong .profile hay .pam_environment hay /etc/environment hay /etc/profile.d/*.sh. Mình chỉ cần ứng dụng chạy cho bản thân user hiện tại nên mình chọn định nghĩa biến trong .profile

Mình ghi nội dung file này như sau:

export JAVA_HOME=/usr/java/default

logout và login và èn en: ứng dụng IDEA đã có thể khởi động qua GUI laucher như bình thường!

Tổng kết

Nói ngắn gọn có 2 tổng kết nhỏ qua bài này:

  • Ta có thể định nghĩa 1 app desktop trên Gnome bằng cách định nghĩa file desktop dưới đường dẫn /usr/share/applications/
  • Có 4 chỗ định nghĩa biến môi trường mà DisplayManager có thể load được là .profile, .pam_environment, /etc/environment, etc/profile.d/*.sh. Tùy hoàn cảnh mà ta có thể chọn chỗ định nghĩa cho phù hợp nhất.

Happy Hacking!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bùi Hồng Hà

59 bài viết.
297 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
80 8
Bài viết tổng hợp cơ chế hoạt động của https Chút ít về chữ ký điện tử Chữ ký điện tử là cơ chế bao gồm 3 thuật toán: Thuật toán chọn một khóa...
Bùi Hồng Hà viết hơn 3 năm trước
80 8
White
45 7
Giới thiệu Gần đây thấy bản thân chém gió rất nhiều về MapReduce, Hadoop v.v nhưng chưa thấy có bài viết nào tổng hợp + giải thích cụ thể về MapRe...
Bùi Hồng Hà viết gần 3 năm trước
45 7
White
37 0
Giới thiệu Google là một công ty dẫn đầu về phần mềm xử lý Big Data. Hầu hết các phần mềm xử lý dữ liệu như Hadoop đều có nguồn gốc ý tưởng từ Goo...
Bùi Hồng Hà viết gần 3 năm trước
37 0
Bài viết liên quan
White
1 0
sudo du sh
t viết hơn 2 năm trước
1 0
White
34 10
Thời kỳ mới đi làm tôi nghĩ cứ phải gõ thật nhiều cho quen cho nhớ nhưng lâu dần việc đó cho cảm giác thật nhàm chán. Hiện giờ, những gì tôi hay là...
manhdung viết hơn 3 năm trước
34 10
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
59 bài viết.
297 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!