Câu trả lời:
Bạn có thể xem trang tích hợp vân tay trên Launchpad , nơi có tất cả các thông tin về trình đọc dấu vân tay, để xem bạn có được hỗ trợ hay không và cách sử dụng nó trên Ubuntu.
Đầu tiên, hãy kiểm tra tính tương thích của phần cứng của bạn.
Thiết bị được hỗ trợ | freedesktop.org
Thiết bị không được hỗ trợ | freedesktop.org
Thứ hai, xin vui lòng hiểu rằng đăng nhập thông qua nhận dạng dấu vân tay, AKIK, đôi khi không đáng tin cậy.
fprint không hoàn toàn ổn định và có thể không hoạt động mọi lúc.
Phần còn lại của bài đăng này được sao chép từ Bài đăng này trên Diễn đàn Ubuntu .
Tôi đã không sử dụng nó một cách cá nhân, nhưng đó là hướng dẫn cập nhật nhất cho Ubuntu mà tôi có thể tìm thấy. Bạn có thể cần gỡ lỗi gksu.py
tập lệnh bao bọc
Để định cấu hình thiết bị của bạn:
Cài đặt fprint
sudo apt-get install fprint-demo libfprint-dev libfprint0 libpam-fprint aes2501-wy
Tiếp theo, đăng ký ngón tay của bạn bằng cách sử dụng thiết bị đầu cuối hoặc giao diện người dùng đồ họa.
pam_fprint_enroll
fprint_demo
Tiếp theo, định cấu hình PAM để đầu đọc dấu vân tay có thể hữu ích.
gksu gedit /etc/pam.d/common-auth
Thêm phần này vào đầu tệp (thực hiện nhiều lần trong nhiều lần bạn muốn cho phép)
# Fingerprint only
auth sufficient pam_fprint.so
Hoặc, sử dụng các tùy chọn này nếu bạn muốn yêu cầu dấu vân tay và mật khẩu.
# Fingerprint + password
auth required pam_fprint.so
Đối với các chương trình sử dụng gksudo / gksu, sao chép trình bao bọc gksu.py
bên dưới để /usr/local/bin/gksu
thêm hỗ trợ vân tay và nhập mã sau đây
sudo mv ./gksu.py /usr/local/bin/gksu
sudo chmod 755 /usr/local/bin/gksu
sudo apt-get install python-gnome2-extras python-pexpect
gksu.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
# gksu wrapper, supporting fprint - v 0.2
#
# Copyright 2008 Thimo Kraemer <thimo.kraemer@joonis.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import sys, time
import subprocess, pexpect
import gtk, gksu2
gksu_cmd = ['/usr/bin/gksu']
sudo_cmd = ['/usr/bin/sudo']
# Do not handle requests just asking for a password or using su
skip = False
arg_skip = ['-w', '--su-mode', '-p', '--print-pass']
for arg in sys.argv:
if arg in arg_skip:
skip = True
break
if skip or len(sys.argv) == 1:
proc = subprocess.Popen(gksu_cmd + sys.argv[1:])
proc.wait()
sys.exit(0)
# Simple message box asking for the fingerprint
class InfoBox(gtk.MessageDialog):
def __init__(self):
gtk.MessageDialog.__init__(
self,
parent = None,
flags = gtk.DIALOG_DESTROY_WITH_PARENT,
type = gtk.MESSAGE_INFO,
buttons = gtk.BUTTONS_NONE,
message_format = ' Fingerprint requested ')
self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_SPLASHSCREEN)
self.set_position(gtk.WIN_POS_CENTER)
self.set_image(gtk.image_new_from_stock(gtk.STOCK_DIALOG_AUTHENTICATION, gtk.ICON_SIZE_DIALOG))
self.format_secondary_text('')
def fade(self, msg=None):
self.hide_all()
if msg:
self.format_secondary_text(msg)
self.show_all()
time.sleep(0.1)
while gtk.events_pending():
gtk.main_iteration()
infobox = InfoBox()
# Prepare gksu context
gksu_context = gksu2.Context()
if '-d' in sys.argv or '--debug' in sys.argv:
print 'Prepare gksu context'
debug = True
else:
debug = False
gksu_context.set_debug(debug)
if '-D' in sys.argv or '--description' in sys.argv:
try: i = sys.argv.index('-D')
except ValueError: i = sys.argv.index('--description')
gksu_context.set_description(sys.argv[i+1])
else:
gksu_context.set_description(sys.argv[-1])
if '-m' in sys.argv or '--message' in sys.argv:
try: i = sys.argv.index('-m')
except ValueError: i = sys.argv.index('--message')
gksu_context.set_message(sys.argv[i+1])
if '-g' in sys.argv or '--disable-grab' in sys.argv:
gksu_context.set_grab(False)
else:
gksu_context.set_grab(True)
if '-P' in sys.argv or '--prompt' in sys.argv:
# No context method defined for this argument
pass
# Create sudo command
if debug:
print 'Create sudo command'
sudo_cmd.append('-S')
sudo_cmd.append('-p')
sudo_cmd.append('GNOME_SUDO_PASS')
if '-u' in sys.argv or '--user' in sys.argv:
try: i = sys.argv.index('-u')
except ValueError: i = sys.argv.index('--user')
sudo_cmd.append('-u')
sudo_cmd.append(sys.argv[i+1])
if not ('-k' in sys.argv or '--preserve-env' in sys.argv):
sudo_cmd.append('-H')
sudo_cmd.append('--')
sudo_cmd.append(sys.argv[-1])
# Interact with sudo
if debug:
print 'Run sudo:', ' '.join(sudo_cmd)
sudo = pexpect.spawn(sudo_cmd[0], sudo_cmd[1:])
while sudo.isalive():
response = sudo.expect([
pexpect.EOF,
pexpect.TIMEOUT,
'Scan .*',
'GNOME_SUDO_PASS',
'.+',
])
# EOF, TIMEOUT
if response <= 1:
continue
if debug:
print '[sudo] ', sudo.after.strip()
# Hide infobox
infobox.fade()
# Ask for fingerprint
if response == 2:
msg = sudo.after.strip()
infobox.fade(msg)
# Ask for password
elif response == 3:
try:
pw = gksu2.ask_password_full(gksu_context, 'Password: ')
except:
pw = ''
sudo.sendline(pw)
infobox.destroy()